This question already has answers here:
Segmentation fault on large array sizes
                                
                                    (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