在试图确定是在堆栈还是堆上分配内存时,没有发生堆栈溢出

Stackoverflow not happening while trying to figure out if memory is being allocated on stack or heap

本文关键字:堆栈 栈溢出 内存 分配      更新时间:2023-10-16

我想尝试一个更复杂的例子,在对象中用new分配内存,并在对象内部进一步分配,但需要确定何时会发生stackoverflow。所以决定试试这个例子。我从main()调用了foo()函数,并期望它给出stackerflow错误。它没有。在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();
}

编译为gcc-o测试test.c

递归地调用foo本身,每次调用都有一些计数器增量。你很快就会明白你的错。

尝试在没有优化的情况下使用-o 编译