V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a7898585
V2EX  ›  程序员

虚拟内存能当真实内存使用吗?

  •  
  •   a7898585 · 2013-08-15 07:44:31 +08:00 · 5906 次点击
    这是一个创建于 4118 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一朋友安装了96M内存的xp系统,并且开了一个占用30M-40M的程序,相当于系统只用掉50M不到,说是使用虚拟内存的。
    我想问下虚拟内存能代替真实内存吗?
    28 条回复    1970-01-01 08:00:00 +08:00
    lichao
        1
    lichao  
       2013-08-15 07:56:23 +08:00   ❤️ 1
    能,但是很慢很慢很慢
    windfi
        2
    windfi  
       2013-08-15 08:07:14 +08:00 via Android   ❤️ 1
    一直都是当做内存调用的啊……
    a7898585
        3
    a7898585  
    OP
       2013-08-15 08:19:05 +08:00
    @lichao
    @windfi
    那么比如我原来内存1G的但是我开了N个程序,需要3G内存也能用虚拟内存代替吗
    lichao
        4
    lichao  
       2013-08-15 08:22:06 +08:00
    @a7898585 可以,但是慢到爆。
    字里行间里可以看出你没明白虚拟内存是什么。虚拟内存就是从硬盘上划出一块空间当内存用,但是硬盘的读写速度比真实的内存条慢很多,就这么简单。
    ybbswc
        5
    ybbswc  
       2013-08-15 08:24:00 +08:00
    试试readyboost功能呢?
    我记得有个软件支持XP的readyboost,把U盘当内存用。
    hedaors
        6
    hedaors  
       2013-08-15 08:27:24 +08:00
    @ybbswc 把U盘当内存? 那岂不是比硬盘还要慢?
    ybbswc
        7
    ybbswc  
       2013-08-15 08:29:54 +08:00
    可能是我理解错了。
    http://baike.baidu.com/view/1001106.htm
    wog
        8
    wog  
       2013-08-15 08:30:03 +08:00   ❤️ 1
    可以,不过速度和你的硬盘速度有关
    这个大学里不是连如何寻址都学过么
    felix021
        9
    felix021  
       2013-08-15 08:33:54 +08:00
    @hedaors U盘当内存其实在很多情况下比硬盘要快,因为U盘的随机读比硬盘快很多。
    ybbswc
        10
    ybbswc  
       2013-08-15 08:36:26 +08:00
    1 Plug in the flash drive to the USP port on the computer.
    2 Click "Start" on the desktop and then right-click "My Computer."
    3 Wait for the drop-down menu to appear, then scroll down and click "Properties." The "System Properties" window opens.
    4 Click the "Advanced" tab.
    5 Click the "Settings" button under the "Performance" heading. The "Performance Options" window opens.
    6 Click the "Change" button in the virtual memory section.
    7 Click the flash drive in the drive section and then click the custom size section. Increase the maximum size for the virtual memory as much as you need.
    8 Click "OK" to close the window. Then click the "OK" button for the next two windows that open. You have now set the virtual memory size for the flash drive.
    shinwood
        11
    shinwood  
       2013-08-15 08:46:08 +08:00 via iPhone
    如果用 SSD 就无此方面的顾虑了,把硬盘当内存,其实还是很影响效率的,具体表现在开程序过多内存不够时,硬盘灯会狂闪当内存来读写,也就是那个 pagefile.sys 文件。
    zhujinliang
        12
    zhujinliang  
       2013-08-15 08:52:30 +08:00
    实际上不能吧,硬盘又不能被CPU直接寻址。

    比如有512M内存,程序A运行中,吃掉了500M,此时需要运行B的话,B要求分配200M内存,系统发现可用内存不够,而且此时A不是前台活动的程序,于是把A挂起,把A在内存中的数据放入虚拟内存,清理A占的空间,分出200M给B。

    如果你此时再切换到A程序,系统会有个较长时间的卡顿,此时,系统重新分配500M内存给A,然后将数据从虚拟内存再读回物理内存,然后激活A。而分配500M内存给A时,又出现内存不够用的情况,又需要挂起B,将B的数据放入虚拟内存。。。

    通过这样反复交换,看起来可用内存被扩大了。
    nybux
        13
    nybux  
       2013-08-15 09:04:13 +08:00
    另一个名字叫交换内存swap,这样解释你应该就清楚了
    gdm
        14
    gdm  
       2013-08-15 17:38:21 +08:00
    即使用ssd当虚拟内存,速度还是远远不如物理内存的。更何况机械硬盘呢。
    sophy
        15
    sophy  
       2013-08-15 17:49:21 +08:00
    @hedaors U盘要比硬盘快的多
    miaoever
        16
    miaoever  
       2013-08-15 18:07:41 +08:00
    这个『当』要看对谁来讲,对于应用层的程序来看,你访问的始终是逻辑地址,这个地址空间是可以大于实际内存的,而超出物理内存的部分会由 OS 负责在内存和磁盘间进行换入换出。而对于 OS 而言,直接面对的是物理内存,所以就没有虚拟内存这一层的抽象了,能够使用的内存空间就只有物理内存那么大。
    Sdhjt
        17
    Sdhjt  
       2013-08-15 18:12:27 +08:00
    其实虚拟内存就是给人心理安慰的
    timonwong
        18
    timonwong  
       2013-08-15 18:43:41 +08:00
    虚拟内存概念在物理内存之上,你该指的是页面文件。
    Golevka
        19
    Golevka  
       2013-08-15 22:39:20 +08:00
    楼主需要脑补一下虚拟地址, MMU, paging以及swapping
    scusjs
        20
    scusjs  
       2013-08-15 22:41:41 +08:00
    废话。。。要不然玩大型游戏怎么办。。。
    但是虚拟内存调用很慢,相当于文件读写。
    hedaors
        21
    hedaors  
       2013-08-16 08:59:26 +08:00
    @sophy 为神马我向 u 盘拷东西的时候都不超过 20 M/s, 往移动硬盘拷的时候 都 30+ M/s 啊? (usb 2.0)
    sivacohan
        22
    sivacohan  
       2013-08-16 09:06:02 +08:00 via Android
    @Golevka mmu和swap有什么关系。。。
    slixurd
        23
    slixurd  
       2013-08-16 10:11:28 +08:00
    @hedaors U盘的质量参差不齐,SLC、MLC什么的,而且有的U盘为了保证稳定和良品率会限速(所以就有了焊掉某个引脚加速的神U盘出现..
    硬盘什么的普遍不存在这个问题,毕竟现在的硬盘速度远超过usb2.0的极限速度了(当然2.0下40M/s都很难达到
    Golevka
        24
    Golevka  
       2013-08-16 15:14:23 +08:00
    @sivacohan 没什么关系
    zhttty
        25
    zhttty  
       2013-08-16 15:38:08 +08:00
    @hedaors
    @wog
    @miaoever
    @hedaors

    1、U盘快的在于随机读取,突发读取快,其实就是省掉了机械硬盘机械部分寻址寻道和移动的过程,但是对于连续的读写,2.0的u盘远远慢于5400转的机械硬盘,3.0的u盘基本和7200转的机械硬盘相当。

    2、swap是交换分区,不能说是内存,虚拟内存的叫法也不太妥当,操作系统仅有在虚拟内存不足的时候才会将内存中比较不活跃的数据移到swap中,好空出内存空间,这种反复交换的过程是非常消耗IO的,会很慢,相当于大批量的随机读写机械硬盘。

    3、ssd固态硬盘和u盘都是无机械结构的,只不过ssd硬盘的算法比较先进,位宽也打很多,所以传输数据是3.0u盘的8~12倍,随机的读能力特别强,写能力稍一般,总体快过机械硬盘;

    4、如果能有4块ssd做raid,然后将raid作为swap,速度勉强能达到ddr3 1333内存的速度,不过这成本和性价比只是比内存稍低罢了,应用价值不高。
    zhttty
        26
    zhttty  
       2013-08-16 15:40:44 +08:00
    @zhttty

    第2条的第一行笔误,“虚拟内存”改为“内存”
    第3条的第一行笔误,"打"改为“大”
    Shieffan
        27
    Shieffan  
       2013-08-16 15:41:34 +08:00
    真实内存访问延时 100clk more or less(2GHZ CPU 1clk不到1纳秒),i3 CPU内存带宽 25.6GB/s
    硬盘平均寻道时间几毫秒,SATA3 带宽6Gb/s 速度600MB/s。 就算是SSD,latency也在几毫秒...

    所以基本就不是在一个数量级的
    Kvm
        28
    Kvm  
       2013-08-16 16:29:55 +08:00
    死磕硬盘。。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2833 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:47 · PVG 15:47 · LAX 23:47 · JFK 02:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.