2012-09-14 59 views
1

我有一個簡單的問題。我知道,在我調用一個函數時編譯一個程序後,會生成一個調用堆棧,其中包含參數,局部變量的空間,返回點以及我收取的寄存器。哪裏存儲在內存中的當前對象的引用?

但是在像C++這樣的面嚮對象語言中,編譯器存儲對當前對象的引用嗎? object->instanceMethod()會將對象指針存儲爲調用堆棧中的參數嗎?

我知道這個問題是多面手,並感謝您的回答

回答

2

在C++中,當一個成員函數被稱爲指針到其上,將操作實例(即會是怎樣this在函數內部)隱式傳遞沿着其他函數的參數/參數。實際上,不同的系統使用不同的約定,所以一些這樣的參數可以打包到寄存器中,並且不會放在堆棧上(這往往會更快),但是您的概念基本上是合理的。

3

這是實現定義的,但在實踐中,你會發現,大多數(所有?)C++編譯器生成其傳遞this指針作爲隱藏的第一個參數代碼該函數,因此您可以在方法簽名中明確指定它的情況下訪問它。

+1

一些編譯器可能會使用特殊的調用約定。例如,Visual C++的'__thiscall'約定是將'this'指針傳遞給ECX寄存器以進行32位構建。 –

+0

是的,但這只是參數傳遞方式的實現細節(在堆棧上與使用寄存器上)。我寫的所有內容都是作爲隱含的第一個參數傳遞的,它與調用約定無關。 :-) –

相關問題