C ++のクラスメソッドが呼び出されたときに、暗黙の'this'ポインターが最初の引数なのか、最後の引数なのかを知る必要があります。つまり、スタックに最初にプッシュされるか最後にプッシュされるか。
言い換えれば、呼び出されているクラスメソッドがコンパイラによって次のように取得されるかどうかを尋ねています。
int foo::bar(foo *const this, int arg1, int arg2);
//or:
int foo::bar(int arg1, int arg2, foo *const this);
したがって、拡張により、そしてさらに重要なことに、G++がこのポインターをそれぞれ最後または最初にプッシュするかどうかにも答えます。グーグルに尋問したが、あまり見つからなかった。
ちなみに、C ++関数が呼び出されると、C関数と同じことをしますか?すなわち:
push ebp
mov ebp, esp
全体として、呼び出されるクラスメソッドは次のようになりますか?
; About to call foo::bar.
push dword 0xDEADBEEF
push dword 0x2BADBABE
push dword 0x2454ABCD ; This one is the this ptr for the example.
; this code example would match up if the this ptr is the first argument.
call _ZN3foo3barEpjj
ありがとう、そして多くの義務があります。
編集:物事を明確にするために、私はGCC / G++4.3を使用しています