Linux虚拟内存空间布局

Linux虚拟内存空间布局

Linux虚拟内存空间分为内核空间和用户空间两部分。Linux操作系统和驱动程序运行在内核空间,应用程序运行在用户空间。两者不能简单地使用指针传递数据,因为Linux使用虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。

32位Linux虚拟内存空间(线性地址空间)布局

通常32位Linux内核虚拟地址空间划分0-3G为用户空间,3-4G为内核空间。

Linux虚拟内存空间布局

代码段:通常存放程序中的代码和常量。
数据段:通常存放程序中的初始化后的全局变量和静态变量。
BSS段:通常存放程序中的未初始化的全局变量和静态变量。
堆:通常用来存放程序中进行运行时被动态分配的内存段。
栈:通常用来存放程序运行时的栈帧,包含局部变量、函数形参、数组、函数返回值、返回地址等等。