1

我声明并初始化了一个具有 [100][1000][1000] char 元素(100MB)的数组,它第一次没有说堆栈溢出。但是当我运行它一段时间后它会抛出一个堆栈溢出异常!我在项目选项->链接器->系统中将 -Stack Reserve Size- 增加到 200,000,000,但它没有用!我正在使用 2GB 内存。如何避免堆栈溢出。

4

3 回答 3

8

停止使用堆栈!使用堆内存!

于 2009-10-18T04:03:07.643 回答
1

您是否有理由需要分配那么多堆栈内存?这可能是您的算法的缺陷 - 而不是编译器的缺陷。

于 2009-10-18T04:06:03.083 回答
0

默认堆栈大小不是链接器选项,而是通过许多深奥的平台特定机制进行控制。

在 Windows 上,这可以在调用 CreateThread 时进行控制。在 Unix 上也有执行此操作的 pthread attr 机制。

在非线程代码中,在 Unix 上有控制这一点的 ulimit 设置,但它们可以受到平台限制的限制。例如,在 32 位进程中的 AIX 上,堆栈和堆在第二段中一起增长,因此两者的最大容量为 256Mb(一旦它们命中就会很有趣)。

您可能可以使用平台机制来控制它(如 ulimit),但使用堆的建议可能是谨慎的。

于 2009-10-18T12:33:41.833 回答