C++(十八) — 記憶體模式
阿新 • • 發佈:2018-12-17
1、記憶體模式
一個程式執行時,先複製到記憶體,然後CPU逐句讀取指令執行。
每個儲存單元存放一個位元組(8bit)資料,每個有一個唯一的地址,地址是順序編碼的。比如:一臺計算機256MB記憶體,則有256*1024*1024個記憶體單元,如果用7位十六進位制數表示地址值,則範圍是:0x0000000~0xFFFFFFF。
記憶體分配:
- (1)程式碼區:存放程式程式碼;
- (2)全域性資料區 或 靜態變數區:全域性變數 + 靜態資料。存放長期資料的區域,從程式開始執行到結束,都會在記憶體中佔有固定的位元組;
- (3)棧區:區域性變數。存放程式函式中的區域性變數,就是,用到某個函式時,該函式定義的變數就存在棧區,退出時相應的變數會自動釋放;還有特點:先進後出,即先進棧的變數後退出;
- (4)堆區:動態資料,指標。在程式執行過程中申請的記憶體空間,也要在程式結束時釋放,否則記憶體洩漏;
2、變數儲存位置、作用域
(1)全域性變數
儲存位置:全域性資料區(程式結束後由系統釋放);
作用域:全域性作用域,只需在一個原始檔中定義,作用所有;
週期:一直存在;
引用方式:其他檔案使用時,用extern 關鍵字宣告。(注意:不能兩個檔案中定義相同的名字,重定義了);
(2)靜態變數
儲存位置:全域性資料區(程式結束後由系統釋放);
作用域:檔案作用域,在被定義的檔案中;
週期:一直存在;
引用方式:static, const。(檔案不相互包含
(3)區域性變數
儲存位置:棧區。(編譯器自動分配釋放,存放函式引數值,區域性變數值);
作用域:區域性;
週期:程式執行出則銷燬;
引用方式:
(4)靜態區域性變數
儲存位置:全域性資料區;
作用域:區域性作用域;
週期:一直存在;
引用方式:static。(只被初始化一次)
(5)動態資料,指標
儲存位置:堆區;
作用域:區域性作用域;
週期:在程式執行中申請的記憶體空間,在程式結束中釋放;