1
16
Windows不会立即提交堆栈内存,而是为其保留地址空间,并在访问时逐页提交。阅读 this page 更多信息。 因此,堆栈地址空间由三个连续区域组成:
这允许我们构造一个函数来获取堆栈大小(具有页面大小粒度):
有一点需要考虑:
|
2
7
Win32 Thread Information Block 当您想在线程中找出它使用了多少堆栈空间时,可以执行以下操作:
|
3
1
堆栈的工作方式也不符合您的预期。堆栈是一个线性页面序列,最后一个(顶部)页面用页面保护位标记。当触摸此页面时,保护位被移除,页面可以使用。为了进一步增长,将分配一个新的保护页。 因此,您想要的答案是gaurd页的分配位置。但是你提出的技术会触及到有问题的页面,结果会使你试图衡量的东西失效。
确定(堆栈)页是否具有保护位的非侵入性方法是通过
|
4
-1
可以使用GetThreadContext()函数确定线程的当前堆栈指针。然后使用VirtualQuery()查找此指针的堆栈基。减去这两个指针将得到给定线程的堆栈大小。 |
TheKing · 为什么数组的地址可以有负值? 2 年前 |
yurnero · MATLAB:“加载”一个快速访问功能 6 年前 |
joe · 一页可以同时在两个工作集中吗? 6 年前 |
Jaques · “.exe”已触发断点 6 年前 |
adn bps · 在函数中修改变量的高效内存方法 6 年前 |
Gauraang Khurana · C语言中分段错误的不稳定行为 6 年前 |
Rajesh K · 如何查找设备中存在的广告垃圾? 6 年前 |