我正在使用Visual Studio 2005中的C编程。 我有一个多线程程序,但这里并不是特别重要。
如何确定(大约)我的线程使用了多少堆栈空间?
我计划使用的技术是将堆栈内存设置为一些预定值,例如0xDEADBEEF,运行程序很长时间,暂停程序并调查堆栈。
如何使用Visual Studio读写堆栈内存?
编辑:例如,参见{{link1:“如何确定最大堆栈使用情况。”}} 那个问题讨论了嵌入式系统,但在这里我试图确定常规PC上的答案。
如何确定(大约)我的线程使用了多少堆栈空间?
我计划使用的技术是将堆栈内存设置为一些预定值,例如0xDEADBEEF,运行程序很长时间,暂停程序并调查堆栈。
如何使用Visual Studio读写堆栈内存?
编辑:例如,参见{{link1:“如何确定最大堆栈使用情况。”}} 那个问题讨论了嵌入式系统,但在这里我试图确定常规PC上的答案。
VirtualQuery
返回内存分配区域的基地址 - 向下增长栈的最后一个(理论上)可用字节的地址。在一个向上增长栈的平台上,第一个VirtualQuery
调用将会给出所需的结果。我想我可以用一张图片来说明它;等我有更多时间时,我可能会这样做。 - atzzVirtualQuery
内部和编译器代码生成的合理假设,那么它是不可能的(栈增长应该在第一个VirtualQuery
调用完成时结束)。虽然你可以调用这个函数两次(或n次),并取最后一个结果来确保。但这也不是100%可靠的;例如,另一个进程可以对我们进行WriteProcessMemory
,那么我们就会出问题 :)。栈使用的概念只有在健康监测或调试时才有意义,所以这个函数应该是可以的。 - atzz