C++內存空間分佈

在這裏插入圖片描述

如上所示即爲典型C內存空間分佈圖,從高地址向低地址進行說明:

1.stack,即棧區,存放自動變量,以及函數調用時保存的信息。每當進行函數調用時,函數的實參和返回地址以及調用者的上下文環境會被存放在棧中;棧區由編譯器自動分配,從高地址向低地址擴展,爲什麼會這樣?我也不知道

2.heap,即堆區,動態內存分配都是發生在堆區,堆區由程序員分配釋放,或程序結束後由操作系統自動回收,從低地址向高地址擴展

3.uninitialized data,即未初始化數據段,通常稱爲bss段,未初始化的全局變量和靜態變量都存放在此處;這個段在程序開始之前由內核初始化爲全0,所以不在可執行文件中佔用位置,可減少可執行文件體積

4.initialized data,即已初始化數據段,通常稱爲數據段,已初始化的全局變量和靜態變量都存放在此處,可進一步劃分爲只讀區和讀寫區

5.text,即文本段/代碼段,用來存放程序的可執行代碼,代碼段是隻讀的,防止被修改

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章