我正在运行一些代码,这可能会指出我不太了解堆和堆栈之间的区别。下面我有一些示例代码,我要么在堆栈上声明一个数组,要么在 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 )。这是什么疯狂?堆栈是否有(相当小的)数组大小限制?