【发布时间】:2015-02-21 18:46:46
【问题描述】:
在这个网站上有很多关于堆栈和堆的问题。但我想知道编译器实际上是如何管理堆栈的?基于堆栈的分配是在运行时还是编译时决定的? 考虑以下示例:
#include <iostream>
using namespace std;
class Test {
// Test class' data members
public:
// member functions
};
int main() {
Test t; // automatic object
// use t here
return 0;
}
这里的问题是对象 t 什么时候被分配?内存将在编译时或运行时分配?我知道局部变量,对象在函数被调用时被分配并在函数终止时被销毁。
【问题讨论】:
-
最后一句话没有回答你的问题吗?
-
"调用函数时分配对象" => 函数运行时...
-
通常,编译器不会对堆栈做任何事情。
-
在某些情况下,例如。当函数地址被传递给外部 API 调用时,编译器甚至不知道它可能在哪个堆栈上被调用。
标签: c++ stack-allocation