繁体   English   中英

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

[英]thread stack size on Windows (Visual C++)

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

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

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

您可以从TEB的顶部和底部获取当前提交的大小。 您可以从PE头获取进程初始保留和提交大小。 但是你无法检索传递给CreateThread的实际大小,也没有任何API来获取当前堆栈的保留或提交的剩余大小,请参阅线程堆栈大小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM