使用 mingw 编译时增加堆栈大小?
我正在编写一个递归洪水填充算法来查找图像中的连接组件,我的代码可以使用 MSVC 2008 编译器编译并运行良好;但 mingw 编译的二进制文件在运行时崩溃了。
当我使用 std::stack 将算法转换为非递归算法后,一切顺利。
但是如果在某些情况下我必须使用递归算法,而 mingw 无法处理怎么办?
如何增加二进制文件的堆栈大小,是否有任何编译选项?
谢谢
I'm writing a recursive flood-fill algorithm to find connected components in an image, my code compiles and runs well with MSVC 2008 compiler; but the mingw-compiled binary crashed at runtime.
After I converted the algorithm to non-recursive with std::stack, everything goes well.
But what if I must use recursive algorithm in some case, and mingw cannot handle it?
How can I increased stack size of a binary, is there any compilation options?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
其中 N 是堆栈大小。例如
gcc -Wl,--stack,4194304
Use
where N is stack size. E.g.
gcc -Wl,--stack,4194304
也许增加堆栈大小不是您想要的解决方案。这些限制的存在确实是有原因的。
在不久的将来,您的算法也可能会使用更多的堆栈空间,您将不得不再次增加它。
也许您应该考虑将算法转换为非递归算法。
对于每个算法都可以这样做。
查看此讨论
并且您可能还会获得性能提升
Maybe increasing stack size is not the solution you want. These restrictions do exist for a reason.
It also may happen that in a near future your algorithm will use even more stack space and you will have to increase it again.
Perhaps you should consider converting your algorithm into a non-recursive one.
This can be done for every algorithm.
See this discussion
And you will probably gain a performance improvement also
也许最好的选择是使用 pthreads 启动一个新线程并在新线程中运行您的算法。
pthread_create
的参数之一是pthread_attr_t
。使用此属性,您可以指定堆栈大小(通过调用 pthread_attr_setstacksize)。编辑:这是否有效取决于底层兼容层的支持
probably the best bet is to use
pthreads
to start a new thread and run your algorithm in the new thread. One of the parameters topthread_create
ispthread_attr_t
. Using this attribute you can specify the stack size (by callingpthread_attr_setstacksize
).Edit: Whether this works or not is dependent on support of the underlying compatibility layer