c++在執行時,將記憶體從大方向上劃分為四個區域,在這些不同區域中存放的資料,會被賦予不同的生命週期,以便我們靈活程式設計。
1.**區:由作業系統管理,用於存放函式體的二進位制**
2.全域性區:用於存放全域性變數和靜態變數以及常量
3.棧區:由編譯器自動分配、釋放,存放函式的引數值和區域性變數等
4.堆區:由程式設計師分配釋放,或在程式結束後由作業系統**
在程式編譯之後且程式執行之前,會生成乙個exe的可執行程式,未執行該程式前有兩個區域。
堆區堆區由程式設計師進行分配或釋放,若程式設計師不釋放,則會由作業系統自行**。c++主要使用new關鍵字開闢堆區記憶體。
new運算子可以將原本儲存在棧區的區域性變數在堆區中開闢空間並儲存,之後new將會返回它在堆區開闢的位址,如果需要讀取變數的話則需要利用乙個指標讀取,new的資料是什麼型別,它就會返回乙個什麼型別的指標。**實現如下:
int
*func()
intmain()
通過這樣的方法,即可釋放p指向的記憶體,但是不會刪除指標本身,在這時,該指標就會變成「野指標」,直到將它指向乙個新的記憶體塊。
int
* arr =
newint[10
]
這段**表示在空間中開闢了乙個10元素的陣列,並傳給arr乙個首位址的值。
釋放陣列的時候也要對應為delete arr;
C語言學習 記憶體分割槽
1.1 資料型別 對函式返回的限定 void fun int a 對函式引數的限定 int fun void void a error,不能確定分配記憶體空間的大小void p ok,萬能指標,指標型別都是4個位元組,函式引數,函式有返回值 1.void 可以指向任何型別的資料,被稱為萬能指標 vo...
C語言學習記錄19 編譯過程
本節課研究c語言如何編譯語言程式。對編譯器的了解程度決定 的產品質量。file.i 中間 file.s 彙編檔案 file.o 二進位制檔案 預編譯 文字處理工作 1 處理所有的注釋,用空格代替 2 將所有的 define刪除,並且展開所有的巨集定義 3 處理條件編譯命令,if,ifdef,elif...
c語言學習筆記之記憶體分割槽
c語言有五大記憶體分割槽,分別是棧,堆,全域性區,常量區,區。棧 在需要的時候由編譯器 系統 自動分配,在不需要的時候會由系統自動 的儲存區,記憶體由系統管理,函式中定義的變數儲存在棧中,當呼叫函式的時候函式中定義的變數會被加到棧中,當函式離開的時候,被新增的變數會從棧中移除,棧在最高的位址上,所以...