查看: 5548|回复: 26
收起左侧

[技术原创] 为红伞的内存占用喊冤

[复制链接]
olivercmz
头像被屏蔽
发表于 2008-8-6 12:09:55 | 显示全部楼层 |阅读模式
最近注意到,很多人都说伞的虚拟内存占用较高,貌似这个还成了伞的一大缺点.都是MS惹的祸......

    首先澄清一下,大家在任务管理器看到的虚拟内存应该是virtual memory,和大家平时说的那个硬盘上的内存文件是不同的,那个虚拟内存叫页面文件(pagefile),为什么大家会搞错这两个东西等下再说.

    下面说下什么是真正的虚拟内存(virtual memory),英语好的可以直接去看wiki(就不要看百度百科了,那个貌似没说清楚)网址是http://en.wikipedia.org/wiki/Virtual_memory,英语不好的就看我的解释.
    当我们运行一个程序的时候,程序先是向操作系统(OS)申请一个内存空间,也就是虚拟内存.这个内存只是一个逻辑上的概念,并不存在,(废话,你申请了,还得看OS给不给啊,就算OS想给还得看有没有这么多内存给你,呵呵).
    然后程序开始一步一步运行,这个时候有程序向自己刚才申请到的内存里写入数据,但是那是个虚拟的啊,于是OS就把虚拟内存映射到实际的内存中去,实际的内存包括物理内存(就是内存条上的空间)和页面文件(也就硬盘上的一个空间,大家俗称"虚拟内存"的那个东西).
    所以呢,虚拟内存只是程序员写程序时为了保证程序能完整运行而为程序预留的一个内存空间,但在实际运行的时候程序并不是完整的运行的(比如说,你只用杀软的监控,那它的全盘扫描那部分代码就不会运行),这部分内存空间也就没有被占用.

    下面再来说一下我们常说的那个"虚拟内存"是个什么东东.那个学名应该是页面文件(pagefile),这个我就直接引用百度百科就可以了:
    页面文件是指操作系统用来构建虚拟内存硬盘空间。要整理页面文件,首先将页面文件从原先所在的驱动器移动到其他驱动器,然后对原来驱动器进行整理,最后再将页面文件移回到原驱动器上,此时页面文件就会存放在连续的磁盘空间中了。
具体来说,在windows操作系统下(Windows 2000/XP)pagefile.sys这个文件,它就是系统页面文件(也就是大家熟知的虚拟内存文件),它的大小取决于打开的程序多少和你原先设置页面文件的最小最大值,是不断变化的,有时可能只有几十M,有时则达到600M以上。

    现在我们回到伞的问题上,任务管理器的那个虚拟内存是指什么呢?应该是virtual memory,这个用英文版windows的兄弟可以去证实一下(可惜我英文的2003上次被格了),原因太简单了,我关掉了windows的页面文件,仍然有虚拟内存的使用,显然任务管理器里的虚拟内存是指virtual memory.好了,这说明什么问题呢?说明伞的程序员写程序的时候考虑到了很多问题,而这些问题我们平时都没有碰到,所以呢,很多代码就没有执行,这些代码所要用到的内存也就没有被OS分配.这也是为什么伞用了那么多虚拟内存,我们却用得不卡的原因.

    最后说下为什么大家会把两个"虚拟内存"搞混,顺便鄙视一下MS的翻译水平......
    大家知道在windows下的那个pagefile被貌似被MS称为虚拟内存技术(virtual memory technology),结果到了中文里不知道怎么就把technology给省了,翻译成了虚拟内存,嘿嘿......

评分

参与人数 1经验 +10 收起 理由
will + 10 版区有你更精彩: )

查看全部评分

炎翼
发表于 2008-8-6 12:25:51 | 显示全部楼层
赞!我一直以为这两者就是同一回事
刚看了下,我的页面文件也是禁用的,如LZ所说的,任务管理器里还是有虚拟内存
olivercmz
头像被屏蔽
 楼主| 发表于 2008-8-6 12:26:36 | 显示全部楼层
这个也只是个人理解,欢迎拍砖......
鄙人刚学编程不久,只对一件事不解,为什么QQ的内存可以那么大呢?莫非TX和MS有一腿,windows允许它直接分配内存?
思考中......
emw
发表于 2008-8-6 12:38:56 | 显示全部楼层
先不管虚拟内存,红伞实际使用物理内存75M!!

但物理内存使用多少和卡不卡是两回事,没有很大关系,
除非物理内存耗尽后使用了你所说的页面文件,那时才会影响速度

[ 本帖最后由 emw 于 2008-8-6 12:39 编辑 ]
Ray1112
发表于 2008-8-6 12:44:20 | 显示全部楼层
……实际占用物理内存75MB……刚开机的时候可能会……但用一段时间后就降到10MB左右了……
emw
发表于 2008-8-6 12:46:36 | 显示全部楼层
你看下我的测试贴,实际物理内存从没低于过75M,显示的是假的!!!

http://bbs.kafan.cn/thread-299797-1-1.html
olivercmz
头像被屏蔽
 楼主| 发表于 2008-8-6 12:56:01 | 显示全部楼层
嘿嘿,这个貌似是windows的内存滞留问题,MS的老毛病又犯了......
你应该听说过XP一类的桌面系统不能做服务器用吧?为什么呢,嘿嘿,这就是一个原因.windows desktop下的内存管理不是很合理,写入了内存的数据不会被系统自动清除,一般到(物理)内存出现紧张的时候,这些数据就被扫进了pagefile,而不是扫出内存......所以LS看到内存还是用了那么多.
但伞的程序员是认真的(不得不佩服),他写程序的时候把不用了的内存清空了,所以LS看到伞的内存已经很小了.
炎翼
发表于 2008-8-6 13:15:46 | 显示全部楼层
想问下LZ,你说物理内存上的数据是OS从虚拟内存(virtual memory)里映射上去,那怎么有些进程的物理内存占用比虚拟内存要大呢?
想不明白~~~
olivercmz
头像被屏蔽
 楼主| 发表于 2008-8-6 13:21:59 | 显示全部楼层
原帖由 炎翼 于 2008-8-6 13:15 发表
想问下LZ,你说物理内存上的数据是OS从虚拟内存(virtual memory)里映射上去,那怎么有些进程的物理内存占用比虚拟内存要大呢?
想不明白~~~

有些程序获得了分配内存的权限,只是为什么QQ有这个权限,呃,我就不清楚了......总不会是传说中的内存溢出?

[ 本帖最后由 olivercmz 于 2008-8-6 13:25 编辑 ]
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-5-25 07:18 , Processed in 0.132342 second(s), 19 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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