虚拟内存这个概念,大家都不会陌生。有人会说虚拟内存还不简单,不就是在内存不够的时候,
就把外存当内存来使用,这种说法有一定的道理,但显然不准确。
在最开始内存只有128M或者256M时,内存显然是不够的,在这种情况下说内存不够的话,拿外存
来顶替,这种说法还过得去。
但现在8g内存,16g内存,甚至32g内存都很普遍,现在的内存显然是足够用的,但我们仍然需要虚拟内存,
上面那种说法显然站不住脚。
下面开一个游戏,本人电脑内存8G
可以看到RAM一栏中,3853MB是指内存的消耗,而后面的5408MB则是虚拟内存消耗(更准确的是分页文件),这里内存显然没有超过8G,
那为什么还需要虚拟内存呢?
为了解释虚拟内存,我们首先要弄清楚虚拟地址和真实的物理地址。
虚拟地址也叫逻辑地址:
上图的程序输出了指针b指向的地址0x6afef8,这是用16进制表示的,但这个并不是真实的地址,只是逻辑上的地址。
作为计算机用户,我们并不能接触真实的物理地址,只能接触到逻辑地址,而逻辑地址到物理地址的映射,是由操作系统
完成的,准确来说是通过分页和分段的技术完成的。逻辑地址的大小是人为确定的,一般会比物理地址大很多,当程序
要访问的资源找不到时,可以将其调入到内存中,没有用的资源调入到外存。这也就是常说的页面置换,这样就好像
我们有很大的’内存‘空间。通过这种方式它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),
而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
通过这种方式可以加快程序的运行速度,同时又做到了内存容量变大的效果。
目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
当然资源频繁的调入和调出,势必会降低运行速度,让系统变得特别卡,这个时候就可以考虑加内存条了。
总结:虚拟内存就是逻辑上的内存,它是一种内存管理技术,它管理逻辑地址到物理地址的映射,通过资源的调入和调出
达到了内存变大的效果。