【发布时间】:2011-11-21 08:24:52
【问题描述】:
有没有办法在 C++ 中获取调用堆栈的大小(以字节为单位)?
或者至少是它的底部地址(然后我可以从 ESP 寄存器中减去它?
【问题讨论】:
-
只是好奇,你为什么需要知道它?
-
在main的开头,可以在main()函数中设置一个全局指针变量指向一个局部变量的地址。然后,您可以从局部变量中减去该全局指针地址以估计堆栈使用情况。
-
我过去做过测量我的最大堆栈使用量,看看我是否需要关闭更多对象,或者能够在其上放置更多对象。
-
@Mooing Duck:您假设堆栈帧在内存中是连续的。对此没有要求,一些系统实际上将堆栈帧放在堆中,以尝试防止恶意代码破坏堆栈。
-
您是否在寻找 callStack 可以增长到的最大大小? msdn.microsoft.com/en-us/library/tdkhxaks(v=vs.80).aspx 显示可设置(在 Windows 上),默认为 1MB。