linux C複習 程序空間組成

2021-06-23 05:07:41 字數 740 閱讀 1603

當乙個程式被調入記憶體中執行時,會變成乙個程序,此程序的空間被劃分成以下幾個區域:

1)**區:

**區是唯讀的,程式**會被讀入此區,程式執行期間執行的就是**區中的**。

2)全域性區:

除了**區外,其它區都是可讀可寫的,全域性區用來給全域性變數分配空間

3)bss段:

緊接著全域性區是bss段,給沒有初始化的全域性變數賦初始值0

4)堆區:

使用malloc、new... 分配的空間(也叫自由區)

5)棧區:

給區域性變數(自動變數)分配空間的地方

#include #include int i1 = 10;                          //全域性區

int i2 = 20; //全域性區

int i3; //bss段

static int i4 = 40; //全域性區

const int i5 = 50; //**區

void func(int i6) //i6棧區

linux C複習 記憶體管理

1 虛擬記憶體位址 每個程序都有4g的虛擬記憶體位址,當程序需要真正的物理空間時,向系統申請,系統會分配給程序相應的物理記憶體空間。系統會將程序的一部分虛擬記憶體位址和分配好的物理記憶體之間一 一對應起來,這個過程叫記憶體對映。2 產生段錯誤的原因 1 當程式訪問或修改沒有許可權訪問或修改的記憶體空...

Linux C程序 執行緒

1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...

linux c 程序學習

1.fork 由於fork後的父程序與子程序的優先順序是一樣的,所以會存在父程序已經退出了而子程序還在執行,這時候的子程序就是孤兒程序,會被init程序收養,所以這時候getppid得到的1。int main exit 0 2.vfork 由vfork也是用來建立程序,但是子程序是共享父程序的位址空...