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

Linux下4G虛擬地址空間的分佈

我們現在所寫的原始碼並不是我們所說的程式,從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;

}