【问题标题】:Increase stack size when compiling with mingw?使用mingw编译时增加堆栈大小?
【发布时间】:2011-04-03 05:30:32
【问题描述】:

我正在编写一个递归洪水填充算法来查找图像中的连接组件,我的代码在 MSVC 2008 编译器中编译和运行良好;但是 mingw 编译的二进制文件在运行时崩溃了。

在我使用 std::stack 将算法转换为非递归后,一切顺利。

但是如果我在某些情况下必须使用递归算法,而 mingw 无法处理呢?

如何增加二进制文件的堆栈大小,是否有任何编译选项?

谢谢

【问题讨论】:

  • 另外:使用 扫描线 填充。它通常不需要那么多的堆栈空间。另外:使用您自己的堆栈并使您的函数迭代。

标签: c++ stack-overflow stack mingw callstack


【解决方案1】:

可能最好的办法是使用pthreads 启动一个新线程并在新线程中运行您的算法。 pthread_create 的参数之一是 pthread_attr_t。使用此属性,您可以指定堆栈大小(通过调用pthread_attr_setstacksize)。

编辑:这是否有效取决于对底层兼容层的支持

【讨论】:

    【解决方案2】:

    使用

    gcc -Wl,--stack,N
    

    其中 N 是堆栈大小。例如。 gcc -Wl,--stack,4194304

    【讨论】:

      【解决方案3】:

      也许增加堆栈大小不是您想要的解决方案。这些限制确实存在是有原因的。 也有可能在不久的将来您的算法将使用更多的堆栈空间,您将不得不再次增加它。

      也许您应该考虑将您的算法转换为非递归算法。 这可以为每个算法完成。 See this discussion

      而且您可能还会获得性能提升

      【讨论】:

        猜你喜欢
        • 2019-07-16
        • 2013-09-25
        • 2015-11-22
        • 2010-11-24
        • 2013-03-15
        • 2012-02-10
        • 2017-06-08
        • 1970-01-01
        • 2013-12-24
        相关资源
        最近更新 更多