我如何才能看到我的delphi应用程序当前使用了多少堆栈空间?我有一个非常奇怪的错误,听起来像堆栈问题。我想将它添加到我的应用程序日志中,以了解正在使用/剩余的堆栈空间。使用调试器可能不是那么好,因为可以多次调用例程。
谢谢你!答案 0 :(得分:12)
这可以为您提供当前的堆栈使用情况:
function CurrentStackUsage: DWord;
asm
mov eax, fs:[4]
sub eax, esp
end;
我不记得在运行时获取最大堆栈大小的简单方法,但您在链接器选项中有默认值。
答案 1 :(得分:2)
VMmap可以为您提供应用程序使用的每种内存类型的图形视图,包括堆栈。它没有像Per Larsen的答案中那样给出确切的用法,但可以帮助您在应用程序的不同阶段可视化内存使用情况。
答案 2 :(得分:1)
{$IFDEF MSWINDOWS}
function currentStackUsage: NativeUInt;
//NB: Win32 uses FS, Win64 uses GS as base for Thread Information Block.
asm
{$IFDEF WIN32}
mov eax, fs:[4] // TIB: base of the stack
sub eax, esp // compute difference in EAX (=Result)
{$ENDIF}
{$IFDEF WIN64}
mov rax, gs:[8] // TIB: base of the stack
sub rax, rsp // compute difference in RAX (=Result)
{$ENDIF}
{$ENDIF}
end;