增加堆栈保留大小并不能防止堆栈溢出

Posted

技术标签:

【中文标题】增加堆栈保留大小并不能防止堆栈溢出【英文标题】:increasing stack reserve size doesn't prevent stack overflow 【发布时间】:2013-11-15 11:03:09 【问题描述】:

我想在堆栈上使用一个大数组。但是,尽管我更改了堆栈保留大小,但我仍然不断出现堆栈溢出。 例如:

int main()

    int a[5000000];
    return 0;

在 Visual Studio 2012 中:Properties -> Linker -> System -> Stack reserve size: 10000000

是什么原因造成的?

【问题讨论】:

【参考方案1】:

int 的大小可能是 4 个字节,因此数组的字节数大于元素数。 sizeof(int)*5000000 是您所需要的。 (至少)

【讨论】:

是的,这就是原因...这很奇怪,因为我之前尝试过这样做,我注意到将 1 添加到堆栈保留大小可以让我再定义一个 int(= 我的 DWORD 的大小计算机):我放入堆栈保留大小 0,它让我做一个大小为 62200 的整数数组,当我放在那里 1 时,它让我定义一个大小为 62201 的数组..

以上是关于增加堆栈保留大小并不能防止堆栈溢出的主要内容,如果未能解决你的问题,请参考以下文章

怎么防止堆栈溢出

了解 C 中的堆栈溢出处理

如何在我的递归快速排序算法中防止堆栈溢出

使用 setrlimit() 设置堆栈大小并引发堆栈溢出/段错误

vb 堆栈溢出

如何在 C++ 中处理或避免堆栈溢出