程式設計語言的記憶體分配(C++)
阿新 • • 發佈:2018-12-20
資料是程式操作的物件,具有儲存類別、型別、名稱、作用域和生存期等屬性。在使用的時候要為它們分配記憶體空間。從不同的角度可以對資料進行不同的劃分,型別說明資料佔用記憶體的大小和存放形式,儲存類別說明資料在記憶體中的位置和生存期,作用域則說明可以使用資料的程式碼範圍,生存期則說明資料佔用記憶體的時間特點。
1.常量和變數
按程式執行過程中變數的值能否改變,我們把資料分為常量和變數。程式總的資料物件可以具有左值和右值。左值指儲存單元(或地址、容器),右值是值(或內容)。變數具有左值和右值且在程式執行過程中右值可以改變,而常量僅有右值且執行過程中不得更改。
2.全域性量和區域性量
資料按在程式程式碼中的左右範圍(作用域),可以分為全域性量和區域性量。一般而言,全域性量的作用域為整個檔案或程式,系統為全域性變數分配的儲存空間在程式執行過程中是不改變的,區域性變數的作用域為定義它的函式或語句塊(例如if或for語句),為區域性變數分配的儲存單元是動態的。
3.C++中的記憶體分配
一個由C/C++編譯而來的程式它所佔用的記憶體一般由以下幾部分構成:
- 棧區(Stack):由編譯器自動分配釋放,用來存放函式的引數值,區域性變數的值等。其操作類似與棧。
- 堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由作業系統回收。
- 全域性區(靜態區)(Static):全域性變數和靜態變數的儲存是放在這一塊。初始化的全域性變數和靜態變數放在一塊區域,而未初始化的全域性變數和靜態變數則放在相鄰的另一塊區域。程式結束後由作業系統回收。
- 文字常量區:常量字串存放在此,程式結束後由作業系統回收。
- 程式程式碼區:存放函式體的二進位制程式碼。