【问题标题】:thread stack size on Windows (Visual C++)Windows 上的线程堆栈大小 (Visual C++)
【发布时间】:2011-01-29 14:54:52
【问题描述】:

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

【问题讨论】:

    标签: windows stack stack-size


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 2020-10-17
      • 2011-07-27
      • 2011-05-08
      • 1970-01-01
      • 2011-10-18
      • 2021-03-17
      • 2015-02-13
      • 2010-12-22
      相关资源
      最近更新 更多