找回密码
 立即注册

QQ登录

只需一步,快速开始

教程经验总索引TVMW5/小日本5 索引【视频转换】小日本4/TE4XP 索引【视频转换】TAW4 / TDA3 索引【DVD打包软件】
Nero 索引DVD-Lab 索引【DVD打包软件】编解码器 索引 【必读】固顶帖011号
查看: 2348|回复: 9

[转贴] windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

[复制链接]

51

威望

5121

金钱

228

贡献

管理员

孤魂野草

积分
6397
主题
167
回帖
2216
注册时间
2011-12-18
最后登录
2024-1-26
QQ
发表于 2015-5-9 08:53:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
作者:hgyxbll,原文链接:http://shashanzhao.com/archives/832.html
0.jpg
虽然是中文字,但是理解起来还是很困难,什么叫工作设置内存,什么叫内存专用工作集,什么叫提交大小,区别是什么,让人看了一头雾水.

通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分), 内存专用工作集是程序独占的物理内存, 提交大小是程序独占的内存(包含物理内存和在页面文件中的内存).
注:页面文件就是存放不在物理内存中的内存,文件路径一般在C:\pagefile.sys,目的是为了能够让更多的进程运行,即使合起来所占用的内存已经超过物理内存. 只要将其中一部分内存转入页面文件, 物理内存就可以空出来继续运行新的进程.
它们之间的关系:
工作设置内存 = 内存专用工作集 + 与其他进程共享的物理内存.
提交大小 = 内存专用工作集 + 保存在页面文件中的独占内存.
(其中有些例外,有时候内存专用工作集可能会比提交大小大一点点,不过可以不用考虑)

工作设置内存内存专用工作集在程序不变化情况下会变化, 系统会考虑程序活动情况,物理内存剩余量等减少或增加物理内存.
提交大小在程序不变化情况下不会变化,因为程序就是占用了那么多专用内存.
如果要测试程序占用的内存大小,建议在程序加载完毕后记录提交大小.其他的会变化建议不要记录.

还想要了解更清楚?好孩子.
下面通过代码来详细了解.
首先windows任务管理器已经不够用了,需要用Process explorer和VMMap工具.
接下来解释一些名词:
windows任务管理器中的称谓Process explorer中的称谓VMMap中的称谓
工作设置内存Working setTotal WS
内存专用工作集WS PrivatePrivate WS
提交大小Private BytesPrivate
无对应选项可显示Virtual SizeSize
无对应选项可显示无对应选项可显示Committed

名词说明:
Virtual Size: 程序总的所使用的内存(包含共享,非共享,物理,页面,为程序保留的但未分配的内存)
Committed: Virtual Size减去为程序保留的但未分配的内存
为程序保留的但未分配的内存: 就是告诉系统我要一块内存,但暂时不用,不过分配的地址得给我,系统就给他一个不用的地址,但不分配内存,等程序申请要使用时,就从页面或物理内存中分配出来放在那个地址上.

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


9328

威望

303

金钱

1万

贡献

管理员

自由的灵魂

积分
99878
主题
5265
回帖
26222
注册时间
2003-4-10
最后登录
2024-4-27
发表于 2015-5-9 23:04:29 | 显示全部楼层
不明觉厉!
回复

使用道具 举报

51

威望

5121

金钱

228

贡献

管理员

孤魂野草

积分
6397
主题
167
回帖
2216
注册时间
2011-12-18
最后登录
2024-1-26
QQ
 楼主| 发表于 2015-5-10 09:39:39 | 显示全部楼层

WinXP下任务管理器的“内存大小”“虚拟内存大小”都是不准确的,而且看软件真正占用的内存应该看“提交大小(Private,XP中错译为虚拟内存大小)”,这差不多就是本文的意思。
回复

使用道具 举报

9328

威望

303

金钱

1万

贡献

管理员

自由的灵魂

积分
99878
主题
5265
回帖
26222
注册时间
2003-4-10
最后登录
2024-4-27
发表于 2015-5-10 10:59:35 | 显示全部楼层
如果有几个常用软件的实例来说明一下,就更直观些了。
IsaacZ的发言中如果提到任何字母缩写或专有名词,在本论坛中一般都能搜索到。点此立即搜索点拨论坛。如有搜索不到的,请尝试搜索百度百科,或者跟帖提问。
发帖前请注意看置顶帖。如果你发现自己的问题没有得到回答,说明你的问题提错了地方或者提问前未先阅读本版规则固顶帖011号
回复

使用道具 举报

51

威望

5121

金钱

228

贡献

管理员

孤魂野草

积分
6397
主题
167
回帖
2216
注册时间
2011-12-18
最后登录
2024-1-26
QQ
 楼主| 发表于 2015-5-10 13:15:11 | 显示全部楼层
IsaacZ 发表于 2015-5-10 10:59
如果有几个常用软件的实例来说明一下,就更直观些了。

这个和哪个软件没关系吧?
回复

使用道具 举报

9328

威望

303

金钱

1万

贡献

管理员

自由的灵魂

积分
99878
主题
5265
回帖
26222
注册时间
2003-4-10
最后登录
2024-4-27
发表于 2015-5-10 16:12:11 | 显示全部楼层
我看文章中说的都是“程序”所占的内存,所以认为不同的程序对于内存的占用比例是不同的。
IsaacZ的发言中如果提到任何字母缩写或专有名词,在本论坛中一般都能搜索到。点此立即搜索点拨论坛。如有搜索不到的,请尝试搜索百度百科,或者跟帖提问。
发帖前请注意看置顶帖。如果你发现自己的问题没有得到回答,说明你的问题提错了地方或者提问前未先阅读本版规则固顶帖011号
回复

使用道具 举报

51

威望

5121

金钱

228

贡献

管理员

孤魂野草

积分
6397
主题
167
回帖
2216
注册时间
2011-12-18
最后登录
2024-1-26
QQ
 楼主| 发表于 2015-5-10 18:56:33 | 显示全部楼层
IsaacZ 发表于 2015-5-10 16:12
我看文章中说的都是“程序”所占的内存,所以认为不同的程序对于内存的占用比例是不同的。

当然不一样。程序占用内存,是因为程序需要变量来存储数据。不同的程序需要处理的数据有多有少,占用的内存的大小也不一样。
回复

使用道具 举报

9328

威望

303

金钱

1万

贡献

管理员

自由的灵魂

积分
99878
主题
5265
回帖
26222
注册时间
2003-4-10
最后登录
2024-4-27
发表于 2015-5-10 22:19:23 | 显示全部楼层
伤心的笔 发表于 2015-5-10 18:56
当然不一样。程序占用内存,是因为程序需要变量来存储数据。不同的程序需要处理的数据有多有少,占用的内 ...

因此才希望利用具体的程序来演示这其中的差异,这样像我这样的门外汉就能比较好懂一些了。
IsaacZ的发言中如果提到任何字母缩写或专有名词,在本论坛中一般都能搜索到。点此立即搜索点拨论坛。如有搜索不到的,请尝试搜索百度百科,或者跟帖提问。
发帖前请注意看置顶帖。如果你发现自己的问题没有得到回答,说明你的问题提错了地方或者提问前未先阅读本版规则固顶帖011号
回复

使用道具 举报

51

威望

5121

金钱

228

贡献

管理员

孤魂野草

积分
6397
主题
167
回帖
2216
注册时间
2011-12-18
最后登录
2024-1-26
QQ
 楼主| 发表于 2015-5-11 19:28:14 | 显示全部楼层
本帖最后由 伤心的笔 于 2015-5-11 19:30 编辑
IsaacZ 发表于 2015-5-10 22:19
因此才希望利用具体的程序来演示这其中的差异,这样像我这样的门外汉就能比较好懂一些了。

恐怕这个无法用“具体的程序”来说明。
我说一下我的理解:
某个程序A,调用了一个共享组件C,这个C之前已经占了一定的内存,假设占X兆字节,该程序调用C,就可以通过C间接地访问C占用的内存,C占用的内存里面可能有一些有用的数据。同时,程序A自身也需要占用一定的内存,假设占Y兆字节,用来存放只有自己才会用到的数据。(注意,这个Y兆字节,并不一定是程序A当前使用的内存总量,程序A可以向操作系统申请更多内存备用。)然后另一个程序B,也需要调用C,因此也会通过C间接地访问C占用的内存X;同样,B也有自己独享的内存,假设占Z兆字节。然后,系统的内存空间是有限的,操作系统可能会把程序占用的某些内存,从物理内存中移到了硬盘的分页文件(即虚拟内存)中,假设从A中移走了W兆字节,从B中移走了V兆字节。


那么程序A的工作设置内存就是程序A独占的物理内存,加上组件C的内存。即Y-W+X
程序A的内存专用工作集就是程序A独占的物理内存,即Y-W
程序A的提交大小就是程序A独占的内存,包括物理内存和虚拟内存,不包含组件C的内存。即Y

程序B的工作设置内存就是程序B独占的物理内存,加上组件C的内存。即Z-V+X
程序B的内存专用工作集就是程序B独占的物理内存,即Z-V
程序B的提交大小就是程序B独占的内存,包括物理内存和虚拟内存,不包含组件C的内存。即Z



程序A、程序B、组件C,一共占物理内存Y+Z-W-V+X,注意组件C虽然被两个程序使用,但是只占一份内存。(注意,并不是所有的情况下组件C都可以被共享。也有可能程序A和B需要各自复制一个C)


Windows XP任务管理器中,“内存使用”指的是工作设置内存,“虚拟内存使用(翻译错误)”指的是提交大小,即物理内存+虚拟内存。把任务管理器中所有的“内存使用”加起来,得数大于当前物理内存使用量。我以前受XP错误翻译的影响,以为提交大小是虚拟内存占用,其实是物理+虚拟。
Windows 7任务管理器中,默认显示程序占用的内存专用工作集。其余两项可以手动查看。把任务管理器中所有的内存专用工作集加起来,得数小于当前物理内存使用量。

对于一个程序而言,衡量他所占内存的多少,应该看提交大小。金山毒霸曾经宣称自己的杀毒软件只占15M内存,那是不对的,因为他故意只算了内存专用工作集


另可参考:http://windows.microsoft.com/zh- ... -mean#1TC=windows-7
回复

使用道具 举报

9328

威望

303

金钱

1万

贡献

管理员

自由的灵魂

积分
99878
主题
5265
回帖
26222
注册时间
2003-4-10
最后登录
2024-4-27
发表于 2015-5-11 21:32:46 | 显示全部楼层
嗯,现在好懂多了。
IsaacZ的发言中如果提到任何字母缩写或专有名词,在本论坛中一般都能搜索到。点此立即搜索点拨论坛。如有搜索不到的,请尝试搜索百度百科,或者跟帖提问。
发帖前请注意看置顶帖。如果你发现自己的问题没有得到回答,说明你的问题提错了地方或者提问前未先阅读本版规则固顶帖011号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|点拨论坛

GMT+8, 2024-4-27 16:58 , Processed in 0.201627 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表