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