Linux下4G虛擬地址空間的分佈
阿新 • • 發佈:2018-12-21
我們現在所寫的原始碼並不是我們所說的程式,從C程式碼(.c/.cpp)---->連結程式(.exe)是要經過以下幾個過程才能真正的執行連結的;
C源程式--->預編譯處理(.c/.cpp)-->編譯,優化程式(.s)--->彙編程式(.o)--->連結(.exe)
在編譯執行過程中,我們首先需要將我們的程式儲存到記憶體中才能調取執行,但是記憶體是有限的,不可能將所有的程序都放在記憶體中去,所以都會給給程序分配一個4G的虛擬地址空間儲存資料,在程序執行時在對映到記憶體中去。
在 windows下 4G的空間分佈為 : 使用者態:核心態=1:1
Linux下 4G的空間分佈為: 使用者態:核心態=3:1
本文以在Linux下一個程序在4G虛擬地址空間中的資料分佈情況為例:
下面給出一個例子:
int gdata1=10; //.data int gdata2=0; //.bss int gdata3; //.bss static int gdata4=20; //.data static int gdata5=0; //.bss static int gdata6; //.bss int main() { int ldata1=30; //.text(普通的區域性變數開始都為指令存在指令區,只有在執行編譯時在棧上開闢空間儲存) int ldata2=0; //.text int ldata3; //.text ststic int ldata4=40; //.data static int ldata5=0; //.bss static int ldata6; //.bss return 0; }