c++ - 如果类在堆上,函数会进入堆还是堆栈?
问题描述
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;
}
如果我在 HEAP 上创建一个类实例并激活一个“类方法”,函数局部变量和“元数据”存储在哪里?在 HEAP 上,因为该类在 HEAP 或堆栈上?
解决方案
如果类在堆上,函数会进入堆还是堆栈?
C++ 语言没有“堆”或“栈”之类的东西。
自动变量具有自动存储功能。动态对象具有动态存储。静态变量具有静态存储。线程局部变量具有线程局部存储。
函数根本没有存储。只有对象(有时是引用)会这样做。
关于冯诺依曼架构上 C++ 语言的典型实现:程序的指令与堆栈和堆分开存储。所以,这个问题的答案是:两者都不是。
函数局部变量...存储在哪里?
自动变量 - 即那些在函数内的块本地并且不是静态的 - 例如f
,x
并y
存储在自动存储中。
在一个典型的实现中,自动存储是通过将对象存储在执行堆栈上或在 CPU 寄存器中或无处实现的(如果它们的存储不可观察)。
推荐阅读
- android - RxJava 风格的 LiveData TestObserver 和测试扩展因 NullPointerException 而失败
- javascript - 如何从 Js for 循环中只得到一个结果?
- arrays - 试图获取数组中结构的值
- html - 如何在输入框中将输入限制为仅数字?
- oracle - Oracle:是否可以仅在重复出现时才过滤掉它们?
- ios - 在 for 循环中发出请求时返回 JSON
- c# - 确定私有可解析蓝牙 LE 地址
- perl - 使用 Perl 将 UTF-8 Unix LF .dat 文件转换为 UTF-8 编码的 CR LF .dat 文件
- r - 将 DF 变量存储在向量中(带引号的问题)
- azure - 如何在 Azure 应用服务中部署单个 cshtml 文件