使用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编译时增加堆栈大小?的主要内容,如果未能解决你的问题,请参考以下文章

在 Maven 构建期间增加 Scala 堆栈大小

在编译时检查堆栈使用情况

使用 Pip 安装 Python 包时如何使用 MinGW 的 gcc 编译器?

c++堆栈的各自大小,堆和栈的各自定义

MinGW(GCC)编译时的优化参数是啥?

MinGw Gcc / Gtk+3 / Cmake 编译程序. 如何去掉控制台窗口?