c 記憶體空間

2021-10-21 00:21:39 字數 764 閱讀 7130

乙個可執行程式指令碼可以分為3個基本段,**段,資料段,bss段;unix下可以使用size命令檢視可執行檔案的段大小資訊,size a.out

header->**text->資料data->bss

2、資料段.data 存放編譯階段就能確定的資料,可讀寫

3、**段.text **段通常指用來存放執行d**的一塊儲存區域

左邊為unix系統的可執行檔案,右邊時程序對應的邏輯位址空間的劃分

1、靜態全域性變數和全域性變數的區別

全域性變數

靜態全域性變數

生命週期

程式執行到該變數至程式結束

程式開始至程式結束

作用域所有**

當前檔案

**段中是位置

全域性資料區(資料段.data)

全域性資料區(資料段.data)

2、靜態區域性變數和區域性變數的區別

區域性變數

靜態區域性變數

生命週期

函式呼叫到該變數至函式返回

程式開始至程式結束

作用域函式內部

函式內部

**段中是位置

棧全域性資料區(資料段.data)

C 記憶體空間

乙個c 程式編譯後占用的記憶體分為如下幾個部分 棧 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值。在乙個程序中,位於使用者虛擬位址空間頂部的是使用者棧,編譯器用它來實現函式的呼叫。堆 由程式設計師分配和釋放,若程式設計師不釋放,則程式結束時被os 存放由new,malloc分配的記憶體,可...

c 記憶體空間

題目 若char是一位元組,int是4位元組,指標型別是4位元組,如下 class ctest virtual void mem fun private char m chdata int m ndata static char s chdata char ctest s chdata 0 靜態成員...

C 記憶體空間分布

1.stack,即棧區,存放自動變數,以及函式呼叫時儲存的資訊。每當進行函式呼叫時,函式的實參和返回位址以及呼叫者的上下文環境會被存放在棧中 棧區由編譯器自動分配,從高位址向低位址擴充套件,為什麼會這樣?我也不知道 2.heap,即堆區,動態記憶體分配都是發生在堆區,堆區由程式設計師分配釋放,或程式...