Tag: fastmm

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

我知道如何使用GlobalMemoryStatusEx获得系统内存的使用,但是这告诉我整个操作系统正在使用什么。 我真的希望我的程序能够报告已经分配和正在使用的内存。 在我的Delphi 2009程序中有没有办法调用Windows函数或者某个FastMM函数来查找单独由我的程序分配的内存? 重温我的问题,我现在已经通过@apenwarr将我接受的答案改为GetMemoryManagerState答案。 它产生了与我曾经使用过的GetHeapStatus函数(现在不推荐使用)相同的结果,而GetProcessMemoryInfo.WorkingSetSize给出了一个非常不同的结果。

有没有办法通过编程来判断FastMM是否没有释放特定的内存块?

我试图检测一个内存块是否没有被释放。 当然,经理告诉我,通过对话框或日志文件,但是如果我想将结果存储在数据库中呢? 例如,我想在数据库表中有分配给定块的例程名称。 在阅读FastMM的文档之后,我知道从4.98版本开始,我们就有可能通过pipe理员通知内存分配,释放和重新分配。 例如OnDebugFreeMemFinish事件传递给我们一个PFullDebugBlockHeader ,其中包含有用的信息。 有一件事PFullDebugBlockHeader丢失 – 如果给定的块被应用程序释放的信息。 除非OnDebugFreeMemFinish仅被称为未被释放的块? 这是我不知道,并希望找出。 问题是,即使挂钩到OnDebugFreeMemFinish事件,我无法确定该块是否被释放。 这里是一个例子: program MemLeakTest; {$APPTYPE CONSOLE} uses FastMM4, ExceptionLog, SysUtils; procedure MemFreeEvent(APHeaderFreedBlock: PFullDebugBlockHeader; AResult: Integer); begin //This is executed at the end, but how should I know that this block should be freed //by application? Unless this is executed ONLY for not freed blocks. […]