Windows上的线程堆栈大小(Visual C ++)

时间:2010-03-19 19:36:41

标签: windows stack stack-size

是否有调用来确定正在运行的线程的堆栈大小?我一直在寻找MSDN线程函数文档,似乎找不到一个。

2 个答案:

答案 0 :(得分:9)

虽然没有API可以直接找出堆栈大小,但必须保留连续的虚拟地址空间,直到最大堆栈大小 - 这只是很多空间尚未提交。您可以利用此功能并拨打VirtualQuery两次。

对于第一次调用,将其传递给堆栈上任何值的地址,以获取提交的堆栈空间的基址和大小(以字节为单位)。在堆栈向下增长的x86机器上,再次从基址和VirtualQuery中减去大小:这将为您提供为堆栈保留的空间大小(假设您当时没有精确地处于堆栈大小的限制)。总结两者自然会给出总堆栈大小。

答案 1 :(得分:6)

您可以从TEB的顶部和底部获取当前提交的尺寸。您可以从PE header获取流程初始保留和提交大小。但是您无法检索传递给CreateThread的实际大小,也没有任何API可以获取保留的剩余大小,也不会从当前堆栈中提交,请参阅Thread Stack Size