This question already has answers here:
Segmentation fault on large array sizes
(5个答案)
3年前关闭。
我试图在C ++中执行此声明数组(大小= 1,000,000),这给了我运行时错误。
但是它允许这个(大小= 100,000)
再次给出运行时错误
但我可以做如下相同的事情
谁能解释这个原因。
它从堆栈分配内存。堆栈内存有限,因此您不能进行太大的分配。
执行此操作时:
它从堆中分配内存。堆分配可能很大。
有关堆栈和堆内存的更多信息,请参见this堆栈溢出文章。
(5个答案)
3年前关闭。
我试图在C ++中执行此声明数组(大小= 1,000,000),这给了我运行时错误。
unsigned long long a[1000000];
但是它允许这个(大小= 100,000)
unsigned long long a[100000];
再次给出运行时错误
unsigned long long a[100000];
unsigned long long b[100000];
但我可以做如下相同的事情
unsigned long long* a = new unsigned long long[1000000];
谁能解释这个原因。
最佳答案
在C ++中,当您执行此操作时:
unsigned long long a[100000];
它从堆栈分配内存。堆栈内存有限,因此您不能进行太大的分配。
执行此操作时:
unsigned long long* a = new unsigned long long[1000000];
它从堆中分配内存。堆分配可能很大。
有关堆栈和堆内存的更多信息,请参见this堆栈溢出文章。
10-08 18:21