0

プロセッサ スタックでは、push mov や pop などは単一の命令です。

ソースコードをコンパイルするとき、コンパイラは単一のマシン命令バージョンを生成しますが、実行時に、スタックが...まあ通常のスタックコンテナであると仮定すると、実行時にスタックに格納された値にアクセスするには関数呼び出しが必要です。マシンコード。

単一の機械命令よりもはるかに長いセッターおよびゲッターメンバー関数を使用する代わりに、動的ランタイムオブジェクトに対して同じレベルの効率を達成することは可能ですか?

私の考えはマークポインターを使用することですが、関数呼び出しに頼らずに、実行時にその値を文字通りメモリロケーションにプッシュする方法、またはメモリロケーションからプッシュする方法がわかりません。

アセンブリのインライン化はおそらくオプションですが、可能であれば避けたいものです。しかし、単一の命令にならないように、関数本体内に配置する必要があると思います。

4

1 に答える 1

1

あなたがやろうとしているのは、エクストラcallをオプトアウトし、retゲッター/セッターからオプトアウトすることです。この場合、キーワードinlineを使用して、その特定の関数をインライン化するようにコンパイラに指示できます。もう 1 つの方法は、複雑すぎない場合、C マクロ関数を使用してゲッター/セッターをコーディングすることです。

于 2012-01-19T23:40:50.923 に答える