大世界小喽罗吧 关注:14贴子:1,286
  • 3回复贴,共1

『转贴』Windows用1G内存还慢的原因

只看楼主收藏回复

 安装大容量内存后,系统、程序运行效率没有得到大幅度提高,这是因为系统本身运行机制限制了其管理和运用硬件资源的能力。所以纵然硬件资源非常丰厚,如果超出了Windows管理的范围,那么性能也不会得到明显提升。 
 


1楼2008-01-03 17:36回复
    1.情景再现:程序与系统的对话 

      程序说:"嗨,Windows,我要新建一个300像素宽,200像素高的窗口,ok?"于是,Windows立即按要求创建或调用这个资源进内存,然后反馈给应用程序一个代号:"好,我已经创建好你要的窗口,它的代号是#38710。"此后,需要用到新建的这个窗口时,应用程序都用Windows反馈的代号代表这个资源。"Windows,麻烦你在显示屏幕左上角显示#38710。""好!"最后,当应用程序不需要用到该资源的时候,它会要求Windows去除这个资源。"OK,请你删除#38710。""好!"。 

      2.指针——内存中的邮政编码 

      那么这个代号是依据什么标准生成的呢?在绝大多数操作系统中,它是靠一种叫做"指针"的东西来确定的。你可以把整个内存想像成一个邮局,邮递员把需要寄往各地的信件分类放到很多个不同的信箱里。信箱一个接一个,足足占据了一堵墙。每个心细那个都装了一些信件,包含要送往一个特定地区的信息。而且,就好像每个地区都有邮政编码一样,每一块可以存储数据的内存空间也有一个地址——指针。代表这个存储空间的一串数字。内存中某部分数据的"指针",也就是这些数据占据的第一处内存空间的地址。所以,如果我是一个普通的操作系统,有一个应用程序要求我调用一个窗口,我就会按照它告诉我的要求调用这个窗口进内存,如果这个资源的数据在内存中存储的地址开始于#1234567,那么我就会返回一条信息给应用程序:"好了,我调出了这个窗口,它是#1234567。" 
     
    3.解决指针带来的问题 

      在PC中,这种指针有4个字节长。所以如果一个应用程序需要给内存里的某个数据配一个指针,那就需要4字节的内存空间。这样的工作方式给早期的Windows设计者带来了不小的麻烦,因为那时制作工艺尚不发达,内存非常昂贵,一台电脑上有8MB的内存就足以让用户无数次从梦里笑醒了,大多数电脑只能配制4MB内存。在内存如此紧张的情况下,一个应用程序却经常需要用到几百万个资源。要用这些资源,就要个每个资源配发一个指针。每个指针占据4个字节,几百万个指针,就会消耗掉数量客观的一块内存空间。这就好比一份钱很少,但如果要发给全国人民每人一份钱,那就是至少一千三百万元的巨款了。 
     
     
     所以,Windows设计者采用了另外一种替代方案。他们创建了资源表。就是把当前调入内存的所有资源的信息登记到一个清单。这样一来,当应用程序要求系统调用一个资源时,系统调用后就不给它配发指针了,而是直接告诉应用程序该资源在资源表中的序号。"好了,我已经调用了你需要的资源,它在资源表里面的序号是#383"因为需要不是内存地址,所以就可以用一个只需占用2字节的数字表示。这只是两个字节的差距。但当你只有几MB内存,而你运行的程序动咎调用大量资源时,这两字节的差距就会带来很大的优势。 


      你知道吗? 

      微软64位操作系统没1GB内存就别玩 

      在32位Windows 2000/XP中,最大支持4GB的内存,每个应用程序最多只能使用2GB内存,因为另一半的内存也留给系统使用了。而在64位WindowsXP中,这个限制没有了,每个程序能完全使用4GB内存,除Windows,微软还在开发64位版本的SQL Server 2000和Windows Server2003,不过要运行这些应用程序,需要你的电脑至少得有1GB内存


    3楼2008-01-03 17:39
    回复
      2025-06-12 04:30:45
      广告
      4.时过境迁,妙计成缺陷 

        但这种方法也有它的弊端——两个字节能够表现的不同数字非常有限 

        我们可以做个实验:请你写不同的数字。如果只准你写一位数,那就只能写出十个不同数字。如果限制写两位数,虽然能写出更多,但总数仍然有限。以此类推,允许位数越多,能写出的不同数字就越多。但只要位数有限制,写出的不同数字的总数就始终有限。同理,如果允许系统使用4字节的序号,那么在这个"位数限制"下,可以有几十亿个不同的序号可供使用。但如果只准系统使用2字节序号,能用的序号就会锐减到65536个。于是,前面我们讲的资源表就不能无限的拉长。其中的序号最多只有65536个 

        于是问题来了。当调用了65536个资源后,再想调用更多的资源,纵然内存空间还有1GB,足以存储数百亿个资源,但只有2字节的资源表却无法生成更多的序号!没有序号,就意味着无法将各资源区分开来,应用程序自然无法使用这些没有"户口"的资源!事实上,因为没有序号可用,系统根本无法同时调用65536个以上的资源。 

        但在10MB内存都是奢望的年代,要同时调用数十万个资源根本就是"无稽之谈"。所以当时的Windows设计者们没有把这个问题放在心上,果断地选用了资源表,选用了2字节序号。 

        今天,操作系统算是得到报应了。内存便宜了,资源表和2字节序号仍然给我们节省了内存空间,但它带来的坏处却远远超过了它带来的好处。我们有足够的内存空间,可以调用数百万个资源,但资源表里面只有65536个序号!所以同一时间内,内存中只能有65536个资源!还有1GB内存空间可用?等着吧! 
       
       
       
       .真正"耗资源"的是谁? 

        明白了上面的道理,就不难分辨除了大个文件,大个程序外,真正消耗系统资源的是哪些程序了: 

        ★ 调用大量细小资源,把桌面装饰的花里胡哨的软件 

        ★ 各种多媒体播放软件 

        ★ 监视系统的工具软件 

        ★ 能在字体菜单里面预览字体的应用程序(如MS Office) 

        另外,在Windows 9x n/Me中运行16位程序(如DOS程序)时,Windows会划定一块内存供所有这类程序使用。除非所有16位程序都已经关闭,这块内存是不会被释放的。


      4楼2008-01-03 17:39
      回复
        5.有大内存就可以不要虚拟内存了? 

          经常看到不少文章介绍,再有了大内存后,就可以将虚拟内存禁用掉。其实不然!比如:Windows98/Me对大于512MB的内存有先天不足,大于这个数量的内存,Windows98会出现不稳定及启动速度变慢的情况。如果使用了大内存加上禁用虚拟内存,不稳定因素将会进一步增加。 

          另外,Windows本身的设计是,一旦发现有进程转入不活动状态,就会把分配给它的内存空间映射到交换文件中,尽可能空出物理内存给其他活动的进程,并不是用完物理内存才开始动用交换文件。因为如果等到物理内存用完再调用,就已经太迟了。在配制较低的电脑上势必造成数据传输和处理停滞。所以禁止虚拟内存从原则上来讲,最易引起Windows异常,及时不出现运行不了的故障,也会频繁提示虚拟内存不够,请重新设置云云。 

          你知道吗? 

          据华硕专家介绍,在使用INTEL 850/850E芯片组的主板时,如果搭配了2GB RAMBUS内存后,电脑会出现不稳定现象。这是由于Intel850/850E芯片组的限制,Intel的建议为:内存条数*每个内存上的晶片数≤24颗。而目前国内销售的RAMBUS 256内存的晶片数是8颗,Rambus512MB内存的晶片数就是16颗,所以当用户使用了过大的内存时都有可能出现不稳定现象。 
         
         
         6.让大内存为硬盘助力 

          如果你拥有了超过512MB的内存,并且还有一块迈拓或昆腾硬盘,那么Maxtor公司推出的MaxBoost值得一试,据称,它能大幅提升硬盘性能,最大可以提升约60%的硬盘性能。该软件其实是一块磁盘驱动,替换了Windows2000/XP的磁盘驱动,能针对不同应用软件自动在系统内存中设置一个适合大小的缓存,在读写数据前起到预读和缓冲作用,利用磁盘读写数据以一种不肯公布技术细节的"高级算法",从而有效的提升硬盘读写速度,达到提升应用程序和系统速度的目的。据一些专家介绍,该软件虽然没有官方宣称的那样神奇,但确实在文件复制等操作方面大显身手。当然由于MaxBoost还处于测试阶段,所以仍存在一些问题,所以建议普通玩家在该软件正式推出后再使用。


        7楼2008-01-03 17:41
        回复