物理内存:
硬件上,就是内存条。我们知道一个程序运行,必要开一片内存来存储其相关指令和需要用到的堆栈段空间等。
虚拟内存:
物理内存总共4G或16G的大小,若每个进程都开4G物理内存,那物理内存就会被很快用完,系统多进程运行也必将受限。
为了节省物理内存,从逻辑的角度上,我们为每个进程虚拟出4G虚拟内存,每个进程都以为自己拿到了4G内存。
好处是不再为每个进程分配4G物理内存,而是实际用了多少,物理内存就给分配多少。
磁盘swap分区:
对物理内存扩展,若4G物理内存分配完了,那程序的数据就会存到磁盘swap分区上。
为了节省内存:
1.实际用了多少,物理内存就给分配多少
如:一个进程实际用了400M内存,那4G虚拟内存理论上就对应400M的物理内存。因不是一下就分配的(因虚拟内存和swap分区存在,允许程序什么时候用就什么时候分配物理内存),所以某个时间点上,对应的物理内存<400M。
2.物理内存什么时候用什么时候分配
(1)因cpu只与物理内存交互,所以什么时候用到了swap分区上的数据,什么时候就把数据拷贝或做页面置换到物理内存。
(2)实际上一开始虚拟空间都被映射到了磁盘空间当中(像代码段,常量数据等),只有当访问到此地址时,也就是真正用到的时候,才会将磁盘上的数据拷贝到物理内存中。
(3)像malloc动态分配内存时<