C 學習歷程8 記憶體分割槽

2021-10-08 04:36:02 字數 1009 閱讀 8604

c++程式在執行時,將記憶體大方向劃分為4個區域

在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域

**區:

存放 cpu 執行的機器指令

**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可

**區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令

全域性區:

全域性變數和靜態變數存放在此.

全域性區還包含了常量區, 字串常量和其他常量也存放在此.

該區域的資料在程式結束後由作業系統釋放

//全域性變數

int g_a = 10;

int g_b = 10;

//全域性常量

棧區:由編譯器自動分配釋放, 存放函式的引數值,區域性變數等

new:操作符在堆區開闢資料

delete  釋放new開闢的空間

int* func()

int main()

delete arr;//釋放陣列

cout << *p << endl;

cout << *p << endl;

//利用delete釋放堆區資料

delete p;

//cout << *p << endl; //報錯,釋放的空間不可訪問

system("pause");

return 0;

}

c 記憶體分割槽

堆 由程式設計師手動分配和釋放,完全不同於資料結構中的堆,分配方式類似鍊錶。由malloc c語言 或new c 來分配,free c語言 和delete c 釋放。若程式設計師不釋放,程式結束時由系統釋放。棧 由編譯器自動分配和釋放的,存放函式的引數值 區域性變數的值等。操作方式類似資料結構的棧。...

C 記憶體分割槽

前言 最近正在學習有關static的知識,發覺對c 的記憶體分割槽不是很了解,上網查了很多資料,遂將這幾天的學習筆記進行了簡單整理,發表在這裡 棧區 stack 主要用來存放函式的引數以及區域性變數。棧區由系統進行記憶體管理,在函式完成執行時,系統會自行釋放棧區的記憶體,而不需要使用者參與管理。整個...

C 記憶體分割槽

程式編譯後生成的二進位制檔案放在記憶體中的 區 全域性變數 函式外宣告的變數 靜態區域性變數 static修飾的變數 常量字串常量 hello world const 全域性變數 全域性常量 note const修飾的區域性變數不在全域性區 且區域性變數也不在全域性區 區域性變數 函式引數 存放在棧...