我怎么看我的delphi应用程序当前使用了多少堆栈空间?

问题描述 投票:10回答:3

如何查看我的delphi应用程序中当前使用了多少堆栈空间?我有一个very奇怪的错误,听起来像是堆栈问题。我想将其添加到我的应用程序日志中,以了解正在使用/剩余多少堆栈空间。使用调试器可能不太好,因为可以多次调用该例程。

谢谢!

delphi stack delphi-2009
3个回答
12
投票

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

function CurrentStackUsage: DWord;
asm
  mov eax, fs:[4]
  sub eax, esp
end;

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


2
投票
SysInternals中的

VMmap可为您提供应用程序使用的每种类型的内存的图形视图,包括堆栈。它没有像Per Larsen的答案中那样为您提供确切的用法,但是可以帮助您可视化应用程序不同阶段的内存使用情况。


0
投票
{$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;
© www.soinside.com 2019 - 2024. All rights reserved.