我想尝试一个更复杂的示例,在对象中使用 new 分配内存并在其内部进一步分配,但需要确定何时会发生堆栈溢出。所以决定尝试this例子。我从 main()
调用了 foo()
函数,并期望它给出 stackoverflow 错误。事实并非如此。在 foo 中,我将数组大小增加了几个零,并在 foo 中添加了 40 个这样的数组声明。仍然没有崩溃。
我使用 gcc 版本 4.4.2 20091027 (Red Hat 4.4.2-7) (GCC)。大约超过 1MB 的堆栈分配是否会产生 stackoverflow 错误?
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 test.c
最佳答案
使 foo 递归地调用自身,并在每次调用时增加一些计数器。你很快就会发现自己的错误。
关于c++ - 尝试确定内存是在堆栈还是堆上分配时未发生 Stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369363/