如果类在堆上,函数会进入堆还是堆栈?

dsa*_*389 3 c++ memory-management c++11

class Foo{

    public:
        void foo(){
            int x, y; // go to the HEAP or the stack?
        }
};

int main(){
    Foo *f = new Foo();
    f -> foo();

    delete f;
}
Run Code Online (Sandbox Code Playgroud)

如果我在 HEAP 上创建一个类实例并激活一个“类方法”,函数局部变量和“元数据”存储在哪里?在 HEAP 上,因为该类是在 HEAP 上还是堆栈上?

eer*_*ika 6

如果类在堆上,函数会进入堆还是堆栈?

C++ 语言没有“堆”或“堆栈”之类的东西。

自动变量具有自动存储功能。动态对象具有动态存储。静态变量具有静态存储。线程局部变量具有线程局部存储。

函数根本没有存储。只有对象(有时是引用)可以。


关于C++ 语言在冯诺依曼架构上的典型实现: 程序的指令与堆栈和堆分开存储。所以,这个问题的答案是:都不是。

函数局部变量......存储在哪里?

自动变量 - 即函数内块的局部变量并且不是静态的 - 例如fxy存储在自动存储中。

在典型的实现中,自动存储是通过将对象存储在执行堆栈上,或在 CPU 寄存器中,或无处存储(如果它们的存储不可观察)来实现的。