我有一个简单的问题。我知道在我调用函数编译程序之后,会生成一个调用堆栈,其中包含参数,本地变量的空间,返回点以及我收取的寄存器。
但是在像c ++这样的面向对象语言中,编译器存储对当前对象的引用? object->instanceMethod()
会将对象指针存储为调用堆栈中的参数吗?
我知道问题是通才,感谢答案
答案 0 :(得分:3)
它是实现定义的,但在实践中你会发现大多数(所有?)C ++编译器生成的代码将this
指针作为隐藏的第一个参数传递给函数,因此你可以访问它而无需明确指定它在方法签名中。
答案 1 :(得分:2)
在C ++中,当调用成员函数时,指向它将在其上运行的实例的指针(即函数内部将是this
)与其他函数参数/参数一起隐式传递。实际上,不同的系统使用不同的约定,因此一些这样的参数可以打包到寄存器中,而不会放在堆栈上(这往往更快),但你的概念基本上是合理的。