0

我的多线程应用程序崩溃了,我怀疑这是堆栈溢出(应该是一个很好的网站来问这个问题),因为我正在做一些非常深的递归并且崩溃不会发生在较小的订单问题。我正在使用 boost::thread。它提供了通过属性设置堆栈大小(提前)的可能性:

boost::thread::attributes l_ThreadAttributes;
l_ThreadAttributes.set_stack_size(8000000);
boost::thread l_MyThread(l_ThreadAttributes, l_MyFunctor);

我不太相信这确实有效。如果我通过相同的属性“get_stack_size()”询问当前堆栈大小,我得到 0。有没有人有经验(我正在使用 Windows 7 32 位、Visual Studio 9 2008、boost_1_54_0)?此外,这与我在链接器设置中的值有什么关系(例如属性 -> 链接器 -> 系统 -> 堆栈保留大小 -> 8000000)?

有没有一种方便的方法来检查我在运行时(在当前线程中)还剩下多少堆栈?曾经在 malloc.h 和/或 stdlib.h 中方便的 stackavail() 函数似乎已经消失了。

在此先感谢丹尼尔·德克斯

4

0 回答 0