32位的Linux中内存模型
32位的Linux中内存模型
程序内存在地址空间中的分布情况称为内存模型(Memory Model)。
虚拟地址空间在32位环境下的大小为 4GB。那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?
内核空间和用户空间
对于32位环境,理论上程序可以拥有 4GB 的虚拟地址空间,我们在C语言中使用到的变量、函数、字符串等都会对应内存中的一块区域。但是,在这 4GB 的地址空间中,要拿出一部分给操作系统内核使用,应用程序无法直接访问这一段内存,这一部分内存地址被称为内核空间(Kernel Space)。Linux 默认情况下会将高地址的 1GB 空间分配给内核。应用程序只能使用剩下的 2GB 或 3GB 的地址空间,称为用户空间(User Space)。
用户空间内存分布
下图是Linux下32位环境的一种经典内存模型: