讨论这个问题的前提是物理内存大于1GB
先讨论32位的Linux系统内核能访问的最大虚拟地址为0xFFFF FFFF(4G),内核空间为3G~4G,那么内核如何使用这高1GB的线性虚拟地址呢?
Linux对于内存的管理使用了分区机制(ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM),ZONE_HIGHMEM以下的空间用来线性映射,ZONE_HIGHMEM则用作其他用途,因为如果都作线性映射的话,Linux则无法访问高于1GB的物理内存,此处引入了Linux高端内存的概念(此处不讨论高端内存,有兴趣的同学可以自行研究)。
那么为什么64位的系统访问内存速度会比32的快呢?
首先不能笼统的说64位的系统比32位的系统访问内存速度快,这要看访问的是哪一段物理内存,当访问高于1GB的物理内存时,64位的系统要比32的快。
这是因为64位的系统所有的物理地址都是线性映射,高端内存区域大小为0,32位的系统需要访问高于1GB的物理内存时,需要使用高端内存映射物理内存,这个映射过程是动态的,这样就要比直接的线性映射慢了一些。
由于本人技术有限,如果有什么问题,希望一起讨论,大神可以路过,不喜勿喷