当使用mingw编译时如何增加堆栈大小?

7
我正在编写一个递归泛洪算法来查找图像中的连接组件,我的代码在MSVC 2008编译器下能够编译和运行良好;但是在mingw编译后二进制文件在运行时崩溃了。
我将算法转换为使用std :: stack的非递归方式后,一切都很顺利。
但如果我必须在某些情况下使用递归算法,并且mingw无法处理它怎么办?
我该如何增加二进制文件的堆栈大小,是否有任何编译选项?
谢谢

另外:使用扫描线泛洪填充。它通常不需要太多的堆栈空间。另外:使用自己的堆栈并使您的函数成为迭代式。 - sellibitze
3个回答

15

使用

gcc -Wl,--stack,N

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


1
也许增加堆栈大小并不是您想要的解决方案。这些限制是有原因的。可能在不久的将来,您的算法将使用更多的堆栈空间,因此您将不得不再次增加它。
也许您应该考虑将您的算法转换为非递归算法。这对于每个算法都可以实现。 请参阅此讨论 而且您可能还会获得性能提升。

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接