尝试确定内存是在堆栈还是堆上分配时未发生 Stackoverflow
我想尝试一个更复杂的示例,在对象中使用 new 分配内存并在其内部进一步分配,但需要确定何时会发生堆栈溢出。因此决定尝试这个示例。我从 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
I wanted to try out a more complex example of allocating memory with new in an object and allocating further inside it, but needed to know for sure when a stackoverflow will happen. So decided to try this example. I called the foo()
function from main()
and expected it to give a stackoverflow error. It didn't. In foo, I increased the array size by a few more zeros and added 40 more such array declarations in foo. Still didn't crash.
Am using gcc version 4.4.2 20091027 (Red Hat 4.4.2-7) (GCC). Shouldn't a stack allocation of approx more than 1MB give a stackoverflow error?
void foo()
{
double x[100000000];
double x1[100000000];
double x2[100000000];
double x3[100000000];
double x4[100000000];
//...and many more
}
int main()
{
foo();
}
Compiled as gcc -o test test.c
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
让 foo 递归地调用自身,并在每次调用时增加一些计数器。你很快就会发现自己的错误。
Make foo call itself recursively, and have some counter increment with each call. You'll get your fault soon enough.
尝试使用 -o0 进行不优化编译
Try to compile without optimization with -o0