在内存中存储对当前对象的引用?

时间:2012-09-14 09:49:16

标签: c++ compiler-construction compilation

我有一个简单的问题。我知道在我调用函数编译程序之后,会生成一个调用堆栈,其中包含参数,本地变量的空间,返回点以及我收取的寄存器。

但是在像c ++这样的面向对象语言中,编译器存储对当前对象的引用? object->instanceMethod()会将对象指针存储为调用堆栈中的参数吗?

我知道问题是通才,感谢答案

2 个答案:

答案 0 :(得分:3)

它是实现定义的,但在实践中你会发现大多数(所有?)C ++编译器生成的代码将this指针作为隐藏的第一个参数传递给函数,因此你可以访问它而无需明确指定它在方法签名中。

答案 1 :(得分:2)

在C ++中,当调用成员函数时,指向它将在其上运行的实例的指针(即函数内部将是this)与其他函数参数/参数一起隐式传递。实际上,不同的系统使用不同的约定,因此一些这样的参数可以打包到寄存器中,而不会放在堆栈上(这往往更快),但你的概念基本上是合理的。