【问题标题】:C++ stack overflow - visual studio 2008C++ 堆栈溢出 - Visual Studio 2008
【发布时间】:2010-12-07 17:23:54
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-studio-2008 stack-overflow


    【解决方案1】:

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

    【讨论】:

    • 同意。堆栈上的 100MB 非常荒谬。而且我认为我不适合使用多个页面......
    • 使用“免费存储”而不是使用堆
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 2011-03-02
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多