資料是程式操作的物件,具有儲存類別、型別、名稱、作用域和生存期等屬性。在使用的時候要為它們分配記憶體空間。從不同的角度可以對資料進行不同的劃分,型別說明資料占用記憶體的大小和存放形式,儲存類別說明資料在記憶體中的位置和生存期,作用域則說明可以使用資料的**範圍,生存期則說明資料占用記憶體的時間特點。
按程式執行過程中變數的值能否改變,我們把資料分為常量和變數。程式總的資料物件可以具有左值和右值。左值指儲存單元(或位址、容器),右值是值(或內容)。變數具有左值和右值且在程式執行過程中右值可以改變,而常量僅有右值且執行過程中不得更改。
資料按在程式**中的左右範圍(作用域),可以分為全域性量和區域性量。一般而言,全域性量的作用域為整個檔案或程式,系統為全域性變數分配的儲存空間在程式執行過程中是不改變的,區域性變數的作用域為定義它的函式或語句塊(例如if或for語句),為區域性變數分配的儲存單元是動態的。
乙個由c/c++編譯而來的程式它所占用的記憶體一般由以下幾部分構成:
棧區(stack):由編譯器自動分配釋放,用來存放函式的引數值,區域性變數的值等。其操作類似與棧。
堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由作業系統**。
全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在這一塊。初始化的全域性變數和靜態變數放在一塊區域,而未初始化的全域性變數和靜態變數則放在相鄰的另一塊區域。程式結束後由作業系統**。
文字常量區:常量字串存放在此,程式結束後由作業系統**。
程式**區:存放函式體的二進位制**。
C語言的記憶體分配
文章一 c語言的記憶體分配模型 1 程式 區 存放函式體的二進位制 2 全域性區資料區 全域性資料區劃分為三個區域。全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。常量資料存放在另乙個區域裡。這些資料在程式結...
C語言記憶體分配
c語言的記憶體分配主要有5個區域 1 棧區 在執行函式時,函式內的區域性變數 不包括static變數 函式返回值的儲存單元在棧區上建立。函式執行結束時這些儲存單元自動被釋放。棧區記憶體分配運算內置於處理器的指令集中,效率很高,但分配的記憶體容量有限。2 堆區 程式在執行的時候用malloc call...
C語言記憶體分配
c語言的記憶體分配主要有5個區域 1 棧區 在執行函式時,函式內的區域性變數 不包括static變數 函式返回值的儲存單元在棧區上建立。函式執行結束時這些儲存單元自動被釋放。棧區記憶體分配運算內置於處理器的指令集中,效率很高,但分配的記憶體容量有限。2 堆區 程式在執行的時候用malloc call...