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

时间:2010-08-24 14:43:31

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

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

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

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

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

由于

3 个答案:

答案 0 :(得分:13)

使用

gcc -Wl,--stack,N

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

你也可能会获得性能提升