【发布时间】:2012-11-18 04:04:56
【问题描述】:
我正在运行一些代码,这可能会指出我不太了解堆和堆栈之间的区别。下面我有一些示例代码,我要么在堆栈上声明一个数组,要么在 1234567 个元素的堆上声明一个数组。两者都有效。
int main(int argc, char** argv){
int N = 1234567;
int A[N];
//int* A = new int[N];
}
但是,如果我们将 N 设为 12345678,我会遇到 int A[N] 的段错误,而堆声明仍然可以正常工作。 (如果重要的话,我正在使用 g++ O3 -std=c++0x )。这是什么疯狂?堆栈是否有(相当小的)数组大小限制?
【问题讨论】:
-
栈是支持函数调用执行的工作内存。它相对较小,因为大多数调用它只使用几个字节。您可以通过更改编译设置来扩展它。
标签: c++ memory heap-memory stack-memory