如何获得由Delphi程序使用的内存

我知道如何使用GlobalMemoryStatusEx获取系统内存使用,但这告诉我整个操作系统是什么。

我真的希望我的程序报告多少内存,它单独已分配和正在使用。

在我的Delphi 2009程序中有什么办法调用一个Windows函数或者一些FastMM函数来查找已经由我的程序分配的内存?

重新访问我的问题,我现在改变了我接受的答案GetMemoryManagerState答案@apenwarr。它产生与我过去使用的GetHeapStatus函数(现在已弃用)相同的结果,而GetProcessMemoryInfo.WorkingSetSize给出了非常不同的结果。

@R_301_323@

你可以从Delphi运行时获得有用的内存使用信息,而不使用任何直接的Win32调用
function MemoryUsed: cardinal;
var
    st: TMemoryManagerState;
    sb: TSmallBlockTypeState;
begin
    GetMemoryManagerState(st);
    result := st.TotalAllocatedMediumBlockSize + st.TotalAllocatedLargeBlockSize;
    for sb in st.SmallBlockTypeStates do begin
        result := result + sb.UseableBlockSize * sb.AllocatedBlockCount;
    end;
end;

这种方法的最好的事情是它被严格跟踪:当你分配内存,它上升,当你释放内存,它立即下降相同的数额。我在运行我的每个单元测试之前和之后使用这个,所以我可以告诉哪个测试是泄漏的内存(例如)。

相关文章

ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c++ 调用, 抽空研究了一下该库的最新版 ,把...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的功能是:将源操作数送到目的操作数中,即:...
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂...
API原型: Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (By...