1

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

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

我知道这个问题是多面手,感谢您的回答

4

2 回答 2

3

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

于 2012-09-14T09:53:03.590 回答
2

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

于 2012-09-14T09:55:11.897 回答