我inheritance了一些我需要维护的代码,有时候可能不稳定。 以前的人不再可以查询为什么他们在无限的堆栈设置的环境中运行应用程序,我很好奇这可能是什么效果? 应用程序似乎有一些不可预知的内存错误,我们无法find并在Valgrind下运行该应用程序不是一个选项,因为它减慢了应用程序的下降,我们实际上不能运行它。 所以任何想法,这可能是什么效果,赞赏。
如果这是一个单线程标准类型的程序,限制堆栈大小实际上只是一个安全的预防措施。 它会阻止无限的递归在死亡之前吞噬你所有的记忆。 通过设置限制为无限制,您将可以继续分配堆栈,直到它践踏堆。
在传统的Unix方式中,堆栈和堆栈从内存空间的相对两侧开始,相互分配,即一个成长,另一个成长。 当他们打你不会得到一个错误,你只会覆盖数据,直到发生不好的事情。
通常情况下,你不需要一个大的堆栈,但是在堆栈上分配大对象或深度递归对于某些程序来说可能是一个问题,然后他们需要一个更大的堆栈。
编辑:只是添加到单线程的关键。 在多线程程序中,您需要分配多个堆栈。 这种混乱,从两头向中间过渡。 在这种情况下,堆栈被分配在内存空间堆栈一侧的最大堆栈大小的块中。 然后,当你吹你的堆栈时,你正在践踏另一个线程的堆栈。 根据你的体系结构,你可能会添加一些页面保护来限制这个,但这可能是TMI在这一点上;-)