VMMap是一个运行在windows上的内存Profier工具。按F5刷新数据。
虚拟内存
Private Bytes:进程Private Committed(不含共享库部分)的虚拟内存字节数 对应VMMap的Private、windows任务管理器中的【提交大小】,资源管理器中的【提交】
Committed(VMMap):进程Private Committed的虚拟内存字节数 + 进程共享库Committed的虚拟内存字节数
Virtual Size:进程Reserved的虚拟地址空间字节数 对应VMMap的Size
物理内存
Working Set = WS Private + WS Shareable // 进程占用物理内存总字节数 对应windows任务管理器中的【工作设置(内存)】,资源管理器中的【工作集】
WS Private // 进程独享的物理内存字节数(如:堆内存+栈内存+cow机制创建的内存) 对应windows任务管理器中的【内存(专用工作集)】,资源管理器中的【专用】
WS Shareable // 进程可与其他进程共享的物理内存字节数(如:exe及dll代码段、数据段等) 对应windows资源管理器中的【可共享】
WS Shared // 进程已与其他进程共享的物理内存字节数,WS Shared<=WS Shareable
// 若只启动一个exe实例,那么exe的代码段、数据段等不会被共享,因而就不统计在WS Shared中
Peak Working Set // 物理内存的最高峰字节数 对应windows任务管理器中的【峰值工作设置(内存)】
配置符号表
注:除了配置符号表外,还需要配置Source code paths,否则堆栈无法还原出来
Select or Launch Process
注1:在Launch and trace a new process时,Timeline、Heap Allocations、Call Tree、Trace按钮才可以点击
注2:Timeline会实时显示各个分类的内存占用
注3:Heap Allocations必须选择Heap下面橙色列表框中的根条目才可用(会显示该根条目下所有的Heap分配)
注4:Call Tree会以Tree的方式展示所有的内存分配和释放(条目太多时会卡死)
注5:Trace以扁平的方式显示每条内存分配,勾上Show all memory operations(条目太多时会卡死)会显示释放的记录
追踪内存分配
原理:Hook nddll.dll中的RtlAllocateHeap、RtlReAllocateHeap、VirtualAlloc等内存分配释放函数
注:勾上Show all memory operations,会显示RtlCreateHeap(Other)、RtlFreeHeap(Free)释放的内存
RtlAllocateHeap(Commit)
RtlReAllocateHeap(Commit)
RtlReAllocateHeap(Free)
VirtualAlloc
标签:字节数,windows,Private,WS,内存,VMMap,工具 From: https://www.cnblogs.com/kekec/p/17983324