delphi - FastMM:分配的总内存

标签 delphi memory-management fastmm

如何获取 FastMM 分配的内存总量?

我已经尝试过了:

function GetTotalAllocatedMemory: Cardinal;
var
  MMState: TMemoryManagerState;
begin
  GetMemoryManagerState(MMState);
  Result := MMState.TotalAllocatedMediumBlockSize + MMState.TotalAllocatedLargeBlockSize;
end;

正确吗?

无论如何它都会返回一些奇怪的东西。它比我在 Windows 任务管理器中看到的值小 5 倍。我相信 Delphi 应用程序分配的内存量等于 FastMM 分配的内存加上一些系统开销。我错了吗?

最佳答案

使用这个:

//------------------------------------------------------------------------------  
// CsiGetApplicationMemory  
//  
// Returns the amount of memory used by the application (does not include  
// reserved memory)  
//------------------------------------------------------------------------------  
function CsiGetApplicationMemory: Int64;  
var  
  lMemoryState: TMemoryManagerState;  
  lIndex: Integer;  
begin  
  Result := 0;  

  // get the state  
  GetMemoryManagerState(lMemoryState);  

  with lMemoryState do begin  
    // small blocks  
    for lIndex := Low(SmallBlockTypeStates) to High(SmallBlockTypeStates) do  
      Inc(Result,  
          SmallBlockTypeStates[lIndex].AllocatedBlockCount *  
          SmallBlockTypeStates[lIndex].UseableBlockSize);  

    // medium blocks  
    Inc(Result, TotalAllocatedMediumBlockSize);  

    // large blocks  
    Inc(Result, TotalAllocatedLargeBlockSize);  
  end;  
end;

关于delphi - FastMM:分配的总内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470199/

相关文章:

performance - Delphi如何更快地获取网络驱动器目录

delphi - 为什么屏幕返回的分辨率低于我的 Windows 8 平板电脑设置的分辨率?

multithreading - 使用关键部分避免 Delphi 中的缓存一致性问题?

c++ - 有没有办法删除传递给函数 `foo (new Object())` 的对象?

delphi - 除了寻找内存泄漏之外,是否还有另一种情况我应该在销毁应用程序时释放所有对象?

delphi - 在 Delphi 7 中使用 WinAPI 从网络摄像头拍照

c - C中当前进程的内存使用情况

c++ - 如何将函数放置在 C 中的特定地址?

delphi - 释放的 TStringList 在 FastMM4 报告中算作内存泄漏的原因

Delphi 内存问题 (FastMM4)