首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastMM:分配的总内存

FastMM:分配的总内存
EN

Stack Overflow用户
提问于 2011-03-29 17:09:52
回答 4查看 2.4K关注 0票数 7

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

我试过了:

代码语言:javascript
复制
function GetTotalAllocatedMemory: Cardinal;
var
  MMState: TMemoryManagerState;
begin
  GetMemoryManagerState(MMState);
  Result := MMState.TotalAllocatedMediumBlockSize + MMState.TotalAllocatedLargeBlockSize;
end;

这是正确的吗?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-29 18:40:10

使用以下命令:

代码语言:javascript
复制
//------------------------------------------------------------------------------  
// 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;
票数 4
EN

Stack Overflow用户

发布于 2011-03-29 18:09:32

你在拿苹果和桔子作比较。

FastMM内存是指通过FastMM分配的内存使用情况。

这至少不包括以下内容:

  • FastMM FastMM代表您分配的块的开销
  • FastMM未分配的内容的开销(如您的进程空间中的DLL占用的空间)

图形用户界面应用程序的

  • :GDI、GDI+、DirectX、OpenGL和其他为您分配的可视对象的存储的开销。

--jeroen

票数 4
EN

Stack Overflow用户

发布于 2011-03-29 18:43:53

对于进程内存,请使用以下命令:

代码语言:javascript
复制
//------------------------------------------------------------------------------
// CsiGetProcessMemory
//
// Return the amount of memory used by the process
//------------------------------------------------------------------------------
function CsiGetProcessMemory: Int64;
var
  lMemoryCounters: TProcessMemoryCounters;
  lSize: Integer;
begin
  lSize := SizeOf(lMemoryCounters);
  FillChar(lMemoryCounters, lSize, 0);
  if GetProcessMemoryInfo(CsiGetProcessHandle, @lMemoryCounters, lSize) then
    Result := lMemoryCounters.PageFileUsage
  else
    Result := 0;
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5470199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档