我正在编写一个递归泛洪填充算法来查找图像中的连接组件,我的代码编译并运行良好的MSVC 2008编译器;但是mingw编译的二进制文件在运行时崩溃了。
在我使用std :: stack将算法转换为非递归后,一切顺利。
但是如果我必须在某些情况下使用递归算法,并且mingw无法处理呢?
如何增加二进制文件的堆栈大小,是否有编译选项?
由于
答案 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
你也可能会获得性能提升