我有一個簡單的問題。我知道,在我調用一個函數時編譯一個程序後,會生成一個調用堆棧,其中包含參數,局部變量的空間,返回點以及我收取的寄存器。哪裏存儲在內存中的當前對象的引用?
但是在像C++這樣的面嚮對象語言中,編譯器存儲對當前對象的引用嗎? object->instanceMethod()
會將對象指針存儲爲調用堆棧中的參數嗎?
我知道這個問題是多面手,並感謝您的回答
我有一個簡單的問題。我知道,在我調用一個函數時編譯一個程序後,會生成一個調用堆棧,其中包含參數,局部變量的空間,返回點以及我收取的寄存器。哪裏存儲在內存中的當前對象的引用?
但是在像C++這樣的面嚮對象語言中,編譯器存儲對當前對象的引用嗎? object->instanceMethod()
會將對象指針存儲爲調用堆棧中的參數嗎?
我知道這個問題是多面手,並感謝您的回答
在C++中,當一個成員函數被稱爲指針到其上,將操作實例(即會是怎樣this
在函數內部)隱式傳遞沿着其他函數的參數/參數。實際上,不同的系統使用不同的約定,所以一些這樣的參數可以打包到寄存器中,並且不會放在堆棧上(這往往會更快),但是您的概念基本上是合理的。
這是實現定義的,但在實踐中,你會發現,大多數(所有?)C++編譯器生成其傳遞this
指針作爲隱藏的第一個參數代碼該函數,因此您可以在方法簽名中明確指定它的情況下訪問它。
一些編譯器可能會使用特殊的調用約定。例如,Visual C++的'__thiscall'約定是將'this'指針傳遞給ECX寄存器以進行32位構建。 –
是的,但這只是參數傳遞方式的實現細節(在堆棧上與使用寄存器上)。我寫的所有內容都是作爲隱含的第一個參數傳遞的,它與調用約定無關。 :-) –