在尝试确定是否在堆栈或堆上分配内存时,不会发生Stackoverflow

Nav*_*Nav 2 c c++ stack-overflow memory-management

我想尝试一个更复杂的例子,在对象中使用new分配内存并在其中进一步分配,但需要确定何时会发生stackoverflow.所以决定尝试这个例子.我调用了foo()函数main()并期望它给出stackoverflow错误.它没有.在foo中,我将数组大小增加了几个零,并在foo中添加了40多个这样的数组声明.仍然没有崩溃.
我使用的是gcc版本4.4.2 20091027(Red Hat 4.4.2-7)(GCC).堆栈分配大约不应超过1MB会产生堆栈溢出错误吗?

void foo()
{
 double x[100000000];    
 double x1[100000000];    
 double x2[100000000];    
 double x3[100000000];    
 double x4[100000000];    
 //...and many more
}

int main()
{
  foo();
}
Run Code Online (Sandbox Code Playgroud)

编译为gcc -o test test.c

Dia*_*cus 5

让foo以递归方式调用自身,并在每次调用时都有一些计数器递增.你很快就会明白你的错.