通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分),

内存专用工作集是程序独占的物理内存,

提交大小是程序独占的内存(包含物理内存和在页面文件中的内存).

注:页面文件就是存放不在物理内存中的内存,文件路径一般在C:\pagefile.sys,目的是为了能够让更多的进程运行,即使合起来所占用的内存已经超过物理内存. 只要将其中一部分内存转入页面文件, 物理内存就可以空出来继续运行新的进程.

它们之间的关系:

工作设置内存 = 内存专用工作集 + 与其他进程共享的物理内存.

提交大小 = 内存专用工作集 + 保存在页面文件中的独占内存.

(其中有些例外,有时候内存专用工作集可能会比提交大小大一点点,不过可以不用考虑)

工作设置内存和内存专用工作集在程序不变化情况下会变化, 系统会考虑程序活动情况,物理内存剩余量等减少或增加物理内存.

提交大小在程序不变化情况下不会变化,因为程序就是占用了那么多专用内存.

如果要测试程序占用的内存大小,建议在程序加载完毕后记录提交大小.其他的会变化建议不要记录.

还想要了解更清楚?好孩子.

下面通过代码来详细了解.

首先windows任务管理器已经不够用了,需要用Process explorer和VMMap工具.

接下来解释一些名词:

windows任务管理器中的称谓 Process explorer中的称谓 VMMap中的称谓
工作设置内存 Working set Total WS
内存专用工作集 WS Private Private WS
提交大小 Private Bytes Private
无对应选项可显示 Virtual Size Size
无对应选项可显示 无对应选项可显示 Committed

名词说明:

Virtual Size: 程序总的所使用的内存(包含共享,非共享,物理,页面,为程序保留的但未分配的内存)

Committed: Virtual Size减去为程序保留的但未分配的内存

为程序保留的但未分配的内存: 就是告诉系统我要一块内存,但暂时不用,不过分配的地址得给我,系统就给他一个不用的地址,但不分配内存,等程序申请要使用时,就从页面或物理内存中分配出来放在那个地址上.

关于页面文件和物理内存如何转换稍微讲解一下,当程序要访问某个地址, 系统发现这个地址不在物理内存里,就会产生中断,然后去读取页面文件,把页面文件中与内存相关的数据拷贝到物理内存,然后标记一下这个地址已经在物理内存中了,然后继续让程序运行.

现在来看个例子:

程序main.exe定义了一个5M的全局变量,5M的常量,并申请了一个5M的内存,程序代码大小为2M.

char g_str[5*1024*1024];  //5M的全局变量

const char STR[5*1024*1024];   //5M的常量

void main()

{

char *p = (char*) HeapAlloc(GetProcessHeap(), 0, 1024*1024*5);   //申请的5M内存

call_lib();

}

程序lib.dll定义了一个4M的全局变量,4M的常量,并申请了一个4M的内存,程序代码大小为1M.

char g_str[4*1024*1024];

const char STR[4*1024*1024];

void call_lib()

{

char *p = (char*) HeapAlloc(GetProcessHeap(), 0, 1024*1024*4);

}

Main.exe程序调用了lib.dll

先看main.exe总的占用的内存.

Virtual Size = (5M的全局变量 + 5M的常量 + 5M的内存 + 2M的程序代码    )

+ ( 4M的全局变量 + 4M的常量 + 4M的内存 + 1M的程序代码 )

= 30M.

然后看main.exe独占的内存:

(提交大小)Private Bytes = 5M的全局变量 + 5M的内存

+ 4M的常量 + 4M的内存

=18M.

由上可以看出独占指的是只能进程自己使用, 比如代码,常量等就是共享的.

分配的内存,可变的全局或静态变量就是独占的.

至于Working set和WS Private,因为其为变化量,所以无法计算其值.

Working set物理内存变化规律:

一般情况下在分配出来内存后,物理内存只分配4K左右,等访问到超过4K的时候,会慢慢加大物理内存,等到系统总的物理内存小于一定值后,又会将不在前台的进程的物理内存减少.

如果进程想休息了, 可以调用SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1);

来将自己的一些内存从物理内存转移到页面文件.

测试环境: Win7 32位

参考:

VMMAP显示和process explorer不一样

http://superuser.com/questions/185318/process-explorer-not-showing-the-biggest-user-of-my-ram

VMMap内存详解

http://www.cnblogs.com/georgepei/archive/2012/03/07/2383548.html

您可以任意转载本文,但转载时请勿删除作者信息。 
作者:hgyxbll,原文链接:http://shashanzhao.com/archives/832.html
Tags: Committed Private Private Bytes Private WS Total WS Virtual Size Working set WS Private 任务管理器 内存专用工作集 工作设置 提交大小

windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解相关推荐

  1. Windows Server中的 WINS 服务器远程内存损坏漏洞分析

    本文讲的是Windows Server中的 WINS 服务器远程内存损坏漏洞分析, 漏洞概要 在2016年12月,FortiGuard Labs发现并报告了Microsoft Windows Serv ...

  2. 踩内存是什么意思啊_Win10任务管理器中的quot;共享GPU内存quot;是什么意思?

    WIN10任务管理器中的"共享GPU内存"首次在WINDOWS任务管理器中集成. 红框内中专用GPU内存自然不用说,那是显卡带的内存也就是显存容量.因为我这台机的是GTX1060 ...

  3. 如何使用CMD重置Windows 10中的网络设置

    在本教程中,我们将了解如何在Windows 10 中重置网络设置.如果您最近更换了ISP(互联网服务提供商),因此盒子和您的计算机无法再连接到互联网.不要惊慌!尝试重置您的网络设置,您永远不知道,您可 ...

  4. 在 Windows 10 中重置防火墙设置的 4 种方法

    一.通过控制面板重置 Windows 防火墙 如果您是 Windows 平台的常规用户,则可能会意识到微软有一天会终止"控制面板"的可能性,因为它会将其可配置设置转移到 Windo ...

  5. python内存的回收机制_python的内存管理和垃圾回收机制详解

    简单来说python的内存管理机制有三种 1)引用计数 2)垃圾回收 3)内存池 接下来我们来详细讲解这三种管理机制 1,引用计数: 引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用 ...

  6. linux内存管理机制以及free命令详解

    linux内存管理机制以及free命令详解 一.linux内存管理机制 1.物理内存和虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存 ...

  7. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  8. 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

    关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  9. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

最新文章

  1. 《第一行代码》学习笔记19-广播接收器Broadcast_Receiver(2)
  2. 每天一道LeetCode-----在有序的二维数组中查找某个元素
  3. Apsara Stack 技术百科 | 浅谈阿里云混合云新一代运维平台演进与实践
  4. Java分享笔记:自定义枚举类 使用enum关键字定义枚举类
  5. JVM——Java内存模型(JMM)
  6. tiny服务器系列,项目:TinyHTTP服务器
  7. html之浮动和定位
  8. 8.1.4 CSS3文字(1)( 文字阴影和描边、文字排版、自定义文字 )
  9. [转载] python的变量和C++的变量有什么区别
  10. ios 去掉底部状态栏,隐藏ios 9中的状态栏
  11. iterator总结(未完)
  12. playwright-python 截图、录制视频、录制接口(二)
  13. 酵素果冻真的能减肥吗?
  14. Codeforces936B. Sleepy Game
  15. 批量删除,未勾选数据,点击【批量删除】弹出确认删除提示框
  16. dvsdk_4_00_00_22_dm3730 Makefile内容
  17. SLAM——之G2O函数库
  18. Java使用付费代理的两种实现方法
  19. 韩松手机摄影笔记第一课---手机拍照核心功能全解
  20. linux pjsip 编译_pjsip linux下编译

热门文章

  1. python字符编码与转码
  2. Docker 二进制安装docker
  3. 面向对象基础知识整理
  4. ALV可输入状态下输入金额字段变小数的问题
  5. 快速切換手機版網頁語法
  6. jquery ajax 文本丢失加号和连接号的问题
  7. 【C】strcpy()需谨慎使用;
  8. hadoop-09-安装资源上传
  9. 如何写年终总结(转)
  10. 一个 js 中值传递和引用传递的坑。