2012-01-19 9 views
0

プロセッサスタックでは、movとpopなどは単一の命令です。アクセサリー関数呼び出しの代わりにユーザースタック用のシングル命令プッシュ/ポップ?

ソースコードをコンパイルするとき、コンパイラは単一のマシン命令バージョンを生成しますが、実行時には、スタックが正常なスタックコンテナであると仮定します。実行時にスタックに格納された値にアクセスすると、何トンものマシンコードに変換します。

単一の機械命令よりも長いsetterおよびgetterメンバ関数を使用するのではなく、動的実行時オブジェクトに対して同じレベルの効率を達成できますか?

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

可能であれば、インラインアセンブリはおそらくオプションですが、避けたいものがあります。しかし、私はまだそれを単一の命令ではないように関数本体の中に入れなければならないと思います。

+0

コンパイラがC関数をインライン化できることは知っていますか? – Borealid

+0

アイデアを関数として適切に表現すると、本当に*良い*コンパイラ*があなたのためにすぐにそれを管理するかもしれません。インラインではほとんどの方法が得られますが、現代のコンパイラのほとんどはそうしています。使用しているコンパイラのアセンブリ出力を調べてみてください。 – dmckee

答えて

1

getter/settersからcallretを追加しないようにしてください。この場合、キーワードinlineを使用して、コンパイラにその特定の関数をインライン化するように指示できます。別の方法は、あまりにも複雑でない場合は、Cマクロ関数を使ってgetter/setterをコード化することです。

関連する問題