每一个电脑都有一个内存条,这块内存条插上电之后就可以存储数据了,它能容纳数据的大小就是计算机物理内存的大小。
在早期向内存中存储数据和读取数据都是直接操作物理内存的。但是这样我们需要规定好哪一个数据放在哪一个位置,比如a=1
, 将a
放在0x12
这个位置,那么其它的变量就不可以放在这个位置了,当程序较大的时候,你很难确定这块内存是否被使用。这样会为我们制造很多的麻烦。
那么有没有好的解决方案呢? 当然是有的,这种解决方案叫做局部性原理, 局部性原理有两部份内容, 第一部分是时间的局部性,另外一部分是空间的局部性。
时间的局部性说的是: 访问过一次的内存可能在今后还会被再次访问,空间的局部性说的是如果一个内存被访问,那么它隔壁的内存也可能会在之后被访问。也就是将指令访问内存都是有一定倾向性的,那么我们就不需要那么多的物理内存了。
这个时候,CPU和系统这样做,每一个进程都创建一块内存,且每一块内存都是相互隔离的。这样在执行不同的进程时候, 即使访问了相同的地址那么我们没有什么事情,比如在进程A中有一个变量的地址是0x12
,进程B也有一个变量的地址是0x12
, 但是不会出现问题。