1. 程式人生 > >程式設計語言的記憶體分配(C++)

程式設計語言的記憶體分配(C++)

資料是程式操作的物件,具有儲存類別、型別、名稱、作用域和生存期等屬性。在使用的時候要為它們分配記憶體空間。從不同的角度可以對資料進行不同的劃分,型別說明資料佔用記憶體的大小和存放形式,儲存類別說明資料在記憶體中的位置和生存期,作用域則說明可以使用資料的程式碼範圍,生存期則說明資料佔用記憶體的時間特點。

1.常量和變數

按程式執行過程中變數的值能否改變,我們把資料分為常量和變數。程式總的資料物件可以具有左值和右值。左值指儲存單元(或地址、容器),右值是值(或內容)。變數具有左值和右值且在程式執行過程中右值可以改變,而常量僅有右值且執行過程中不得更改。

2.全域性量和區域性量

資料按在程式程式碼中的左右範圍(作用域),可以分為全域性量和區域性量。一般而言,全域性量的作用域為整個檔案或程式,系統為全域性變數分配的儲存空間在程式執行過程中是不改變的,區域性變數的作用域為定義它的函式或語句塊(例如if或for語句),為區域性變數分配的儲存單元是動態的。

3.C++中的記憶體分配

一個由C/C++編譯而來的程式它所佔用的記憶體一般由以下幾部分構成:

  1. 棧區(Stack):由編譯器自動分配釋放,用來存放函式的引數值,區域性變數的值等。其操作類似與棧。
  2. 堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由作業系統回收。
  3. 全域性區(靜態區)(Static):全域性變數和靜態變數的儲存是放在這一塊。初始化的全域性變數和靜態變數放在一塊區域,而未初始化的全域性變數和靜態變數則放在相鄰的另一塊區域。程式結束後由作業系統回收。
  4. 文字常量區:常量字串存放在此,程式結束後由作業系統回收。
  5. 程式程式碼區:存放函式體的二進位制程式碼。