|
|
1
16
Windows不会立即提交堆栈内存,而是为其保留地址空间,并在访问时逐页提交。阅读 this page 更多信息。 因此,堆栈地址空间由三个连续区域组成:
这允许我们构造一个函数来获取堆栈大小(具有页面大小粒度):
有一点需要考虑:
|
|
|
2
7
Win32 Thread Information Block 当您想在线程中找出它使用了多少堆栈空间时,可以执行以下操作:
|
|
|
3
1
堆栈的工作方式也不符合您的预期。堆栈是一个线性页面序列,最后一个(顶部)页面用页面保护位标记。当触摸此页面时,保护位被移除,页面可以使用。为了进一步增长,将分配一个新的保护页。 因此,您想要的答案是gaurd页的分配位置。但是你提出的技术会触及到有问题的页面,结果会使你试图衡量的东西失效。
确定(堆栈)页是否具有保护位的非侵入性方法是通过
|
|
|
4
-1
可以使用GetThreadContext()函数确定线程的当前堆栈指针。然后使用VirtualQuery()查找此指针的堆栈基。减去这两个指针将得到给定线程的堆栈大小。 |
|
|
Mehmet Aslan · freertos堆栈不会溢出 1 年前 |
|
|
rdre8 · x86指令,堆栈指针解释 2 年前 |
|
|
melonfsck · 是否允许在堆栈上分配旋转锁? 2 年前 |
|
|
Yashas Nadig · 调用堆栈lifo队列是否正确? 2 年前 |
|
|
Sougata Mukherjee · 使用js中的stack反转句子 2 年前 |
|
|
Nurana · c堆栈(使用动态数组)realloc内存泄漏问题 2 年前 |