【C 語(yǔ)言】?jī)?nèi)存四區(qū)原理 ( 內(nèi)存四區(qū)建立流程 )
文章目錄
一、內(nèi)存四區(qū)建立流程
一、內(nèi)存四區(qū)建立流程
內(nèi)存四區(qū) 建立流程 :
1. 加載代碼到內(nèi)存 : 操作系統(tǒng) 中 執(zhí)行
可執(zhí)行程序
, 將 存放在硬盤中的
可執(zhí)行程序 ( 包含代碼 )
加載到內(nèi)存中
, 這里的代碼指的是 ELF 文件中匯編代碼對(duì)應(yīng)的機(jī)器碼 ;
2. 將 C 代碼在內(nèi)存中分區(qū) : 操作系統(tǒng) 將 C 代碼 分為 4 4 4 個(gè)區(qū) , 由上到下 :
堆區(qū) ,
棧區(qū) ,
全局區(qū) ,
代碼區(qū) ;
堆區(qū) :
開發(fā)者負(fù)責(zé)分配釋放內(nèi)存
, 調(diào)用 malloc / new 函數(shù)分配內(nèi)存 , 調(diào)用 free / delete 函數(shù)釋放內(nèi)存 , 如果程序結(jié)束還沒(méi)有釋放內(nèi)存 , 則
由操作系統(tǒng)回收內(nèi)存 ;
棧區(qū) : 由
編譯器 自動(dòng) 分配 與 釋放
, 存放函數(shù) 參數(shù) , 局部變量值 ;
全局區(qū) :
靜態(tài)區(qū) :
存放 全局變量 , 靜態(tài)變量
; 初始化的 全局變量 和 靜態(tài)變量 放在一塊區(qū)域 , 未初始化的 全局變量 和 靜態(tài)變量 放在另外一塊區(qū)域 ; 程序執(zhí)行結(jié)束后由操作系統(tǒng)釋放 ;
常量區(qū) :
存放 字符串常量 和 其它常量
, 程序結(jié)束后由 操作系統(tǒng)釋放 ;
代碼區(qū) : 存放 函數(shù)的
二進(jìn)制代碼 ;
3. 執(zhí)行主函數(shù) : 找到 main() 函數(shù) , 并執(zhí)行 ;
C 語(yǔ)言
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。