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

标签 c++ c memory-management stack-overflow

我想尝试一个更复杂的示例,在对象中使用 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/

相关文章:

c++ - C++ 编译器在按值返回时是否避免复制?

c - 我如何从数组指针分配到数组

ps命令的C代码

java - 为什么MemUsage值会随着时间的推移而增加?

c++ - 通过 std::set 迭代的复杂性

c++ - HTC Smart 中的主页按钮事件是否传送到我自己的应用程序?

c++ - 在复制构造函数中设置嵌套在类中的结构变量

c - 如何让 valgrind 忽略特定行?

c# - 了解内存高效 C# 编程的好网站/博客/书籍

java - 为什么内存管理在 Java VM 中如此可见?