我如何才能看到我的delphi应用程序当前使用了多少堆栈空间?

X-R*_*Ray 10 delphi stack delphi-2009

我如何才能看到我的delphi应用程序当前使用了多少堆栈空间?我有一个非常奇怪的错误,听起来像堆栈的麻烦.我想将它添加到我的应用程序日志中,以了解正在使用/剩余的堆栈空间.使用调试器可能不是那么好,因为例程可以多次调用.

谢谢!

500*_*ror 12

这应该为您提供当前的堆栈使用情况:

function CurrentStackUsage: DWord;
asm
  mov eax, fs:[4]
  sub eax, esp
end;
Run Code Online (Sandbox Code Playgroud)

我不记得在运行时获取最大堆栈大小的简单方法,但您在链接器选项中有默认值.


小智 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;
Run Code Online (Sandbox Code Playgroud)