|
|
1
16
Windows不会立即提交堆栈内存,而是为其保留地址空间,并在访问时逐页提交。阅读 this page 更多信息。 因此,堆栈地址空间由三个连续区域组成:
这允许我们构造一个函数来获取堆栈大小(具有页面大小粒度):
有一点需要考虑:
|
|
|
2
7
Win32 Thread Information Block 当您想在线程中找出它使用了多少堆栈空间时,可以执行以下操作:
|
|
|
3
1
堆栈的工作方式也不符合您的预期。堆栈是一个线性页面序列,最后一个(顶部)页面用页面保护位标记。当触摸此页面时,保护位被移除,页面可以使用。为了进一步增长,将分配一个新的保护页。 因此,您想要的答案是gaurd页的分配位置。但是你提出的技术会触及到有问题的页面,结果会使你试图衡量的东西失效。
确定(堆栈)页是否具有保护位的非侵入性方法是通过
|
|
|
4
-1
可以使用GetThreadContext()函数确定线程的当前堆栈指针。然后使用VirtualQuery()查找此指针的堆栈基。减去这两个指针将得到给定线程的堆栈大小。 |
|
|
Helic · 引用项目中的Visual Studio生成事件 1 年前 |
|
|
Fardin Jim · React中的HandleError 1 年前 |
|
Sam · 返回Visual Studio中文档注释中的标记 1 年前 |
|
|
Natty · Visual Studio中缺少“代码覆盖率结果” 1 年前 |
|
|
xTMx · 如何修复恢复自定义Nuget软件包的问题? 1 年前 |
|
|
CCarter · 只能在设计器中DependencyObject的DependencyProperty上设置显示“Binding”的WPF ICommand DependencyProperties[重复] 1 年前 |
|
|
Max · VS 2022中的缩放级别在哪里 1 年前 |