使用mingw编译时增加堆栈大小?
Posted
技术标签:
【中文标题】使用mingw编译时增加堆栈大小?【英文标题】:Increase stack size when compiling with mingw? 【发布时间】:2011-04-03 05:30:32 【问题描述】:我正在编写一个递归洪水填充算法来查找图像中的连接组件,我的代码在 MSVC 2008 编译器中编译和运行良好;但是 mingw 编译的二进制文件在运行时崩溃了。
在我使用 std::stack 将算法转换为非递归后,一切顺利。
但是如果我在某些情况下必须使用递归算法,而 mingw 无法处理呢?
如何增加二进制文件的堆栈大小,是否有任何编译选项?
谢谢
【问题讨论】:
另外:使用 扫描线 填充。它通常不需要那么多的堆栈空间。另外:使用您自己的堆栈并使您的函数迭代。 【参考方案1】:可能最好的办法是使用pthreads
启动一个新线程并在新线程中运行您的算法。 pthread_create
的参数之一是 pthread_attr_t
。使用此属性,您可以指定堆栈大小(通过调用pthread_attr_setstacksize
)。
编辑:这是否有效取决于对底层兼容层的支持
【讨论】:
【参考方案2】:使用
gcc -Wl,--stack,N
其中 N 是堆栈大小。例如。 gcc -Wl,--stack,4194304
【讨论】:
【参考方案3】:也许增加堆栈大小不是您想要的解决方案。这些限制确实存在是有原因的。 也有可能在不久的将来您的算法将使用更多的堆栈空间,您将不得不再次增加它。
也许您应该考虑将您的算法转换为非递归算法。 这可以为每个算法完成。 See this discussion
而且您可能还会获得性能提升
【讨论】:
以上是关于使用mingw编译时增加堆栈大小?的主要内容,如果未能解决你的问题,请参考以下文章