私は、次の多くを参照してください、私の逆アセンブルコードを見て:メソッド呼び出し前のlea命令とは何ですか?
00B442E9 push 4
00B442EB push 3
00B442ED lea ecx,[ebp-24h]
00B442F0 call Foo::Bar (0B41127h)
私は、コールの前にパラメータをプッシュ理解が、lea
はここで何をやっていますか?
私は、次の多くを参照してください、私の逆アセンブルコードを見て:メソッド呼び出し前のlea命令とは何ですか?
00B442E9 push 4
00B442EB push 3
00B442ED lea ecx,[ebp-24h]
00B442F0 call Foo::Bar (0B41127h)
私は、コールの前にパラメータをプッシュ理解が、lea
はここで何をやっていますか?
のちょうど最適化された形だと思います。このlea
命令は、メンバー関数を呼び出す前にecx
レジスタにthis
ポインタをコピーします。
あなたはそれだけでだけでなく、スタックにプッシュされていない理由があるスタックオーバーフローの質問"What's the purpose of the LEA instruction?"
は、私はそれは、this
ポインタがecx
レジスタに渡されたx86用のVisual C++で使用されるthiscall
呼び出し規約で
mov ecx, ebp
sub ecx, 24h
で
lea
命令についてのすべてを読むことができますか? –私は分かりません。 g ++ 'thiscall'は最後の引数の後に' this'をスタックにプッシュします。私が推測しなければならないことは、おそらく誰かがパフォーマンス分析を行い、「この」を先制して登録することで、一般的な使用事例でより良いパフォーマンスが得られると判断したのです。 –