windows资源监视器中内存项(提交、工作集、可共享、专用)的含义及区别

您所在的位置:网站首页 win10虚拟内存是什么 windows资源监视器中内存项(提交、工作集、可共享、专用)的含义及区别

windows资源监视器中内存项(提交、工作集、可共享、专用)的含义及区别

2024-07-09 16:30| 来源: 网络整理| 查看: 265

各字段官方解释:

提交:操作系统为进程保存的虚拟内存量;工作集:进程当前正在使用的物理内存量;可共享:进程当前使用的可与其他进程共享的物理内存量;专用:进程当前使用的不能被其他进程共享的物理内存量;

对各字段的分析: 

使用下面的代码进行测试

#include #define UNIT_SIZE (1024 * 1024) int main(int argc, char* argv[]) { PVOID bookMem = (PVOID)VirtualAlloc(NULL, 64 * UNIT_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); ZeroMemory(bookMem, 64 * UNIT_SIZE); HANDLE heap = HeapCreate(0, 64 * UNIT_SIZE, 1024 * UNIT_SIZE); PVOID heapMem = HeapAlloc(heap, HEAP_ZERO_MEMORY, 32 * UNIT_SIZE); char* p = (char *)malloc(64 * UNIT_SIZE); HeapFree(heap, 0, heapMem); HeapDestroy(heap); free(p); return 0; }

首先时VirtualAlloc(...)函数使用MEM_REVERSE | MEM_COMMIT标志同时预定和调拨64MB的物理内存,但是注意,这里调拨的内存是从系统页交换文件进行调拨的,属于保存的虚拟内存,因此这个时候"提交"项的值会增长大概64MB左右。当进程真正使用这段内存的时候系统才会为其分配真正的物理内存,所以执行完ZeroMemory函数后其他三项的值才会增长,另外这里有一个关系是:工作集 = 可共享 + 专用。

VirtualAlloc、HeapAlloc、malloc和new的调用关系如下所示:

                                                   

malloc和new都是c运行库中的函数, 当c库被加载进进程地址空间后会首先调用HeapCreate函数创建自建堆,malloc函数和new的调用底层调用了HeapAlloc,但是HeapAlloc也是在页交换文件中进行物理内存的调拨的,为什么malloc函数和new开辟内存的时候工作集的值会增加呢?这是因为malloc函数和new封装了内存初始化的过程,在初始化过程中系统的缺页中断就会导致开辟实际的物理内存了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3