作者HZYSoft (pcman.ptt.cc)
看板PCman
标题[公告] 回应关於KKman比较省记忆体的质疑
时间Fri Sep 10 15:15:24 2004
大家等我这篇应该很久了,我本来不想回的,都在改程式没空闲聊,
何况这本来是个没什麽大不了的议题,不过我也很好奇,所以经过研究之後
决定提出我的回覆,大家可以参考看看,有意见欢迎讨论,觉得有道理的欢迎转录,
先撇开胜负或面子问题不谈,我不希望看到一般使用者被数字迷惑。
来个题外话,Intel P4 2.0 G 数字比较大,效能是不是一定比 AMD 1.8 G 强?
刚看到 KKman 这个数字的时候,我也觉得很震惊,这怎麽可能? 可是仔细一想,也还好
因为我要在此强调,Windows XP 工作管理员提供的数字根本完全不能采信
所写出的数字也根本不是实际记忆体用量,不信的人请跟我这样做,我证明给你看
1. 打开工作管理员
2. 启动 Internet Explorer ,看他的记忆体用量,启动瞬间大约在接近 6~8 MB 左右
开始连上线,读取首页之後记忆体用量直线暴增到 12~15 MB 之间,再用一阵子甚至
可能飙上 18,然後请注意这里!! 请把 IE 视窗最小化,再看清楚记忆体用量
是多少? 是不是吓到了? 瞬间减低到 3 MB 以下,甚至有时可能只有 800 KB
你相信吗? 一个要十几 MB 的软体突然间剩下几百 KB 用量? 说别的大家可能不信,
用 IE 举例我相信这就很明显,那是作业系统记忆体管理的把戏,不是实际记忆体
用量。 数字可能部分反应出使用情况,但事实上他到底指的是什麽数值,这点
微软并没有说清楚讲明白,所以其实数字只是看爽的,没多少参考价值。
3. IE 浏览器里面,大家觉得最需要记忆体的是哪里? 是工具列按钮,是网址列,是选单
还是中间那块内容超丰富的浏览器视窗? 用过的人应该知道答案。
事实上刚启动浏览器的时候记忆体使用量很低,到开始读取网页的时候才会暴增
谁在吃记忆体,这很明显。 请问大家,IE 本身需要 10 MB 以上的记忆体才能运作
而耗用记忆体的部分根本不在除网页以外的地方,那一个使用 IE 为核心,完全依赖
IE 浏览器视窗的软体,可能只有 2 MB 就能运作吗? 如果这是可行的,世界最大的
软体公司,怎麽不会想到把原 IE 丢掉,另外写一个用 IE 为核心的软体取代?
别的不说,网页上显示一张全彩 800 x 600 的图要多少记忆体? 现在相簿很流行
不要以为 JPG 很小,要在萤幕上绘图输出都要先在记忆体解压缩成 BMP,大约 2 MB
每个网页上载入一张图档,开两个分页就超过软体总记忆体消耗量了,这不是有鬼?
Firefox, IE 都需要 15 MB 以上的记忆体才会跑,所以一个 IE 核心的软体,消耗
10 MB 以上的记忆体是正常用量,事实上 GreenBrowser 也要 10 MB 以上,谁跟我说
他真的相信 KKman 可以用 5~6 MB 就开好多分页还上 BBS? 我知道显示出来的数字
就是这样,但如果这真的是因为程式写的好,很省记忆体,那 KKman 早就不叫做
KKman 了,应该叫做 Microsoft KKman,因为微软会买走他取带 IE,内建於 Widows
一个软体建构在需要 10 MB 的庞大核心上,没可能用 5 MB 就可以执行,我还没
有找到数字可以这麽"好看"的原因,但是大家可以试着这样做,开几个分页,然後
切换来切换去,是不是发现每次切换记忆体用量都在变动? 而且甚至有时候会分页开
越多,记忆体用量却显示越少的数字? 明眼人都知道这不可能是真的...这不用我多说
我没有办法解释他是怎麽作到这种"数字",但是我可以证明那个数字完全是假的
4. 为了求证,我改用专业软体开发工具实测,结果发现截然不同的结果
使用 Microsoft Process Viewer 来观察 KKman ,有一些新发现:
测试环境: KKman beta 3 开三个空白分页,一个 Google 加上一个 KKCity
Total commit Address Space : 36288 KB = 36 MB
这不是实际用量,commit 只会分配记忆体位址空间,不会实际配置记忆体
等到软体真正需要用记忆体时,才会配置记忆体分页,通常在分页错误时配置
Mapped commit: 13260 KB,13 MB 左右,IE 核心软体的一般正常用量,
Read Only: 8752 KB 常数资料使用 8.7 MB
Writable: 3580 KB 可写入空间 3.5 MB
Executable: 928 KB 可执行记忆体区段, 1MB
-----------------------------------------------
Wroking set: 1588 KB = 1.5 MB
Peak working set: 10684 KB = 10.6 MB
Private pages: 6592 KB
重点来了: Page Fault: 140
查一下电脑上其他软体的 Page fault,一般分布在 4 ~ 35 之间
而 KKman 3 每切换一次分页,就会增加很多 Page fault 分页错误
这是什麽? 通常一个程式有大量的 Page fault 某种程度上表示效能低落
Page fault 是发生在软体像系统要求记忆体,而实际上记忆体空间不存在时
白话一点的说,会发生在记忆体不足需要配置的时候,也就是 KKman 一直在不断的做
大量记忆体配置,释放的动作,经常跟系统要求记忆体,可能是程式编译时刻意缩小
许多记忆体,包括堆叠等等,导致执行期间虽然帐面上数字好看,但实际上效能低落
大量的记忆体分页错误也可能导因於过度使用的 inline function,或其他原因
有时候是因为要求到其他 Page 没映射进来的记忆体,或者种种原因,也或许是因为
他是动态连结 MFC 4.2 的 dll 造成不断需要 memmory mapping ? 实际我不是很懂
也不确定我有没有说错,这要问资讯科系念作业系统的人,我只懂皮毛。但不管怎样
过量的 Page fault 在程式上来说,一般是认为这是程式效能比较低落的指标
虽然我觉得用起来也还好,没什麽特别低落的感觉,但理论上来说确实是这样的
太低阶的东西我也不懂,姑且不论 KKman 怎麽让记忆体消耗量显示出小的数字
这并不代表他比较强,我说过了,使用需要 10 MB 的核心没理由只要 5 MB 就可以跑
何况 PCMan 比 KKman 多了不少功能,这样的比较没有意义也不公平。
5. 结论,技术或数字不是重点,习惯才是王道,大家还是自由选择自己喜欢的软体
各取所需,开心就好。 这才是民主自由开放的社会 :)
不管你是 PCMan , KKman, MultiTerm or PacketSiTE,祝各位使用愉快。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.59.3
※ 编辑: HZYSoft 来自: 140.129.59.3 (09/10 15:16)
1F:推 irvinchen:这一解释,可就清楚明白了:P 140.113.126.3 09/10
2F:推 kewang:大推呀~ 借转回信箱 220.139.62.92 09/10
3F:推 hjdmllmedbu:-->> [人不是PCMan杀的啦~~XD] 218.160.25.59 09/10
4F:推 allenown:请问作者可以转回ptt2吗?谢谢!:) 202.178.160.155 09/10
5F:推 kejj:文章第三行有提到欢迎转录 感谢HZYSoft 220.229.27.34 09/10
6F:推 subsist:推~ 61.229.144.75 09/10
7F:推 a2a:大推 借转回学校的BBS 谢谢 218.164.133.215 09/10
8F:推 passerk:大力推!!PCMAN万岁万岁万万岁~~~~ 140.118.202.141 09/10
9F:推 Kenqr:推~~ PCMan好棒~~~ 140.113.95.98 09/10
10F:推 PolarChen:再推! 218.187.60.67 09/11
11F:推 realtemper:转....宣传一下^^ 140.112.245.210 09/11
12F:推 pachinko:PCMAN真是太强了! 推推~ :D 61.222.17.242 09/13
13F:推 h5bfb3vr:超大推 06/03 01:53