是否有调用来确定正在运行的线程的堆栈大小? 我一直在寻找MSDN线程函数文档,似乎无法find一个。
虽然没有直接查找堆栈大小的API,但是连续的虚拟地址空间必须保留到最大堆栈大小 – 只是大部分空间还没有被提交。 您可以利用这一点, 并对VirtualQuery进行两个调用。
对于第一次调用,将堆栈中任何值的地址传递给获取提交堆栈空间的基址和大小(以字节为单位)。 在堆栈向下增长的x86机器上,再次从基地址和VirtualQuery中减去大小:这将为您提供为堆栈保留的空间大小(假设您当时并不精确地处于堆栈大小的限制范围内)。 总结这两个自然给你总的堆栈大小。
您可以从TEB的顶部和底部获取当前提交的大小。 您可以从PE头获取进程初始保留和提交大小。 但是您不能检索传递给CreateThread的实际大小,也没有任何API可以从当前堆栈获取保留的大小和提交的剩余大小,请参阅线程堆栈大小 。