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修飾的區域性變數不在全域性區 且區域性變數也不在全域性區 區域性變數 函式引數 存放在棧...