1. 程式人生 > >Linux下的4G虛擬地址空間

Linux下的4G虛擬地址空間

在windows下4G 地址空間中低2G,0x00000000-0x7FFFFFFF 是使用者地址空間,4G地址空間中高2G,0x80000000-0xFFFFFFFF 是 系統地址空間。訪問 系統地址空間需要程式有ring0的許可權。而Linux對4G空間的劃分不同與windows。linux將最高的1G 位元組(從虛擬地址0xC0000000 到0xFFFFFFFF),供核心使用,稱為“核心空間”。而將較低的3G 位元組(從虛擬地址0x00000000 到0xBFFFFFFF),供各個程序使用,稱為“使用者空間”。

在Linux系統下,0xC00000000-0XFFFFFFFF為系統空間,為所有的系統程序所共享,0X00000000-0XC0000000為使用者空間。

今天講的是Linux下的虛擬地址空間。

 

1、保留區:是使用者不可訪問的128M地址空間。

例如:int* p = NULL; 後是不可以再對p進行使用,因為p的地址為 NULL ,不可訪問

2、.text段:即程式碼段,存放的是一些指令

3、.data 和.bss都是資料段:其中.data存放的是已初始化且初始化不為零的資料;而.bss是未初始化或初始化為零的資料

用兩個段來存放資料是為了節省空間

4、堆區:特點是由使用者管理,先進後出,用malloc、ralloc、calloc動態分配記憶體使用堆,從低地址向高地址增長

5、共享庫:載入共享庫和使用mmap共享記憶體

6、棧區:特點是由系統管理,先進後出,裡面放了區域性變數、函式形參、自動變數,從高地址向低地址增長