6
在看着我的反彙編代碼我看到很多下面的:在調用方法之前,什麼是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
在這裏做什麼?
在針對x86使用的Visual C++的thiscall
調用約定優化形式,將this
指針在ecx
寄存器傳遞。在調用成員函數之前,此指令將this
指針複製到ecx
寄存器中。
你可以閱讀所有關於堆棧溢出的問題"What's the purpose of the LEA instruction?"
我認爲這只是一個的
mov ecx, ebp
sub ecx, 24h
的
lea
指令是有它不僅僅是壓入堆棧,以及一個原因嗎? –我不知道。 g ++'thiscall'只是在最後一個參數後面將'this'推入堆棧。如果我不得不猜測,有人可能做了一次性能分析,並決定搶先註冊「這個」在常見用例中取得了更好的性能。 –