我的应用程序中可能存在堆栈溢出(当然,仅在发布模式下...),并且想要添加一些保护/调查代码。 我正在寻找一个Windows API来告诉我线程堆栈的当前状态(即,总大小和使用的大小)。 有谁?
THX 诺姆
答案 0 :(得分:1)
堆栈的总大小将是您在创建线程时要求的堆栈大小(或者如果它是主线程则链接程序)。
在MSDN(QueryThreadpoolStackInformation
)上获取Windows 7中线程池的堆栈大小有一些初步参考。
作为近似值,您可以将局部变量的地址与堆栈中另一个局部变量的地址进行比较,以获得我们的量的度量。我相信在Windows中运行的程序如何选择将其局部变量放在虚拟内存空间窗口中分配给一个线程取决于该语言的运行时的实现,而不是Windows真正知道的事情;相反,当您尝试访问分配给堆栈的内存下方的地址时,您会收到异常。
通过检查堆栈是否达到限制来复杂代码的另一种替代方法是为EXCEPTION_STACK_OVERFLOW
添加一个异常处理程序,当它检查堆栈是否已达到其限制时,它将被操作系统调用。有一个例子here。