記憶體空間分布

2022-09-09 23:21:29 字數 836 閱讀 9474

.code或.text,**段:用來存放可執行的機器指令的一塊記憶體區域,這部分區域的**屬於唯讀。字串常量也在也在**段上。

.data,資料段:用來存放程式中已初始化的全域性變數的一塊記憶體區域,例如已初始化的全域性變數和區域性靜態變數(初始化為非0)。

.bss:用來存放程式中未初始化的全域性變數的一塊記憶體區域,例如未初始化的全域性變數和區域性靜態變數(未初始化或初始化為0)。

data段(初始化的段),bss(未初始化的段)都是針對全域性變數和靜態變數來說的。

data又分為讀寫資料段,和唯讀資料段。

bss是未初始化的全域性變數和靜態變數,以及初始化為0的全域性變數和靜態變數。

堆(heap):用來存放程序執行中被動態分配的記憶體段,大小並不固定,可動態擴張或縮減,典型操作malloc和free。堆的申請過程比較複雜,當系統收到程式的申請時,會遍歷記錄空閒記憶體位址的鍊錶,以尋找第乙個空間大於所申請空間的堆結點,然後將該結點從空閒結點鍊錶中刪除,並將該結點的空間分配給程式。

棧(stack):存放程式的區域性變數,以及函式呼叫時候,棧用來傳遞引數和返回值。由於棧的先進後出的特點,特別方便用來儲存和回覆呼叫現場。

程式舉例:

int a = 0;   // 全域性初始化區

char *p1;    // 全域性未初始化區

int main(int argc, const char *ar**)

C 記憶體空間分布

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

c 程序記憶體空間分布

c 程序記憶體空間分布 注意各部分的記憶體位址誰高誰低,注意棧從高到低分配,堆從低到高分配 記憶體分布分為5個部分,從高位址到低位址一次為 棧區 stack 堆區 heap 未初始化資料段 uninitialized data 初始化資料段 initialize data 段 text 1.文字段也...

C CPP程序記憶體空間分布

記憶體分布分為5個部分,從高位址到低位址依次為棧區 stack 堆區 heap 未初始化資料段 uninitialized data 初始化資料段 initialize data 和 段 text 有些文件也把初始化的資料段和未初始化的資料段合稱全域性區。1.文字段 唯讀 共享,作業系統管理 文字段...