尝试确定内存是在堆栈还是堆上分配时未发生 Stackoverflow

发布于 2024-11-16 05:28:31 字数 647 浏览 3 评论 0原文

我想尝试一个更复杂的示例,在对象中使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暖阳 2024-11-23 05:28:31

让 foo 递归地调用自身,并在每次调用时增加一些计数器。你很快就会发现自己的错误。

Make foo call itself recursively, and have some counter increment with each call. You'll get your fault soon enough.

梦回旧景 2024-11-23 05:28:31

尝试使用 -o0 进行不优化编译

Try to compile without optimization with -o0

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文