LogAllocatedBlocksToFile()
中的 FastMM4 输出来查找哪些对象在被覆盖区域之前立即被分配。程序使用定时器每30分钟将分配的块信息写入新文件。不幸的是,我的程序测试运行(DEBUG构建)在大约23小时后崩溃,并出现 EOutOfMemory
异常,根据 MadExcept 显示,已分配了1.83 GB 的内存。从 SysInternals Process Explorer 图中看,每次调用
LogAllocatedBlocksToFile()
都会分配但未释放内存:CPU 使用率图表中的红色峰是
LogAllocatedBlocksToFile()
的调用。我已经添加了对 LogMemoryManagerStateToFile()
的调用,紧接着发生最后一次峰值(私有字节从约183 MB 增加到约218 MB),数据如下:
和这个:55054K 已分配
47911K 开销
53% 效率
因此,FastMM4 似乎并不知道程序根据 Process Explorer 消耗的额外内存。55055K 已分配
47910K 开销
53% 效率
我使用的是从 SourceForge 下载的 FastMM4 版本4.991。测试程序在 DEBUG 模式下运行,并设置了以下宏定义:
问题: 这些功能是否存在已知问题?我是否没有正确使用它们,它们是否不适合在一个调试会话中多次调用?有没有办法释放那些内存?FullDebugMode
UseCustomFixedSizeMoveRoutines
UseCustomVariableSizeMoveRoutines
NoDebugInfo
ASMVersion
DetectMMOperationsAfterUninstall
RawStackTraces
LogErrorsToFile
LogMemoryLeakDetailToFile
AlwaysAllocateTopDown
SuppressFreeMemErrorsInsideException
EnableMemoryLeakReporting
HideExpectedLeaksRegisteredByPointer
RequireDebuggerPresenceForLeakReporting
EnableMMX
ForceMMX EnableBackwardCompatibleMMSharing
UseOutputDebugString