malloc是如何分配內(nèi)存的

Linux內(nèi)存分布

如32位系統(tǒng),下面的3G是用戶(hù)空間,上面的1G是內(nèi)核空間,每個(gè)虛擬內(nèi)存中的內(nèi)核地址,其實(shí)關(guān)聯(lián)的都是相同的物理內(nèi)存
Linux中內(nèi)存分布,從地位到高位分別是程序文件、以初始化數(shù)據(jù)、未初始化數(shù)據(jù)、堆、文件映射、棧,內(nèi)核空間,堆和內(nèi)存映射區(qū)域少動(dòng)態(tài)分配的,一般分配內(nèi)存就是指在這兩個(gè)區(qū)域分配

malloc是如何分配內(nèi)存的(分配的是虛擬內(nèi)存)

1、分配內(nèi)存小于128KB的時(shí)候,通過(guò)brk() 函數(shù)將堆頂指針向高位移動(dòng),獲得新的內(nèi)存空間,通過(guò)brk函數(shù)分配的內(nèi)存,釋放掉后并不會(huì)立即歸還給操作系統(tǒng),而是放入內(nèi)存池中,待下次使用,這樣下次分配的時(shí)候就不需要進(jìn)行系統(tǒng)調(diào)用,也不會(huì)觸發(fā)缺頁(yè)中斷,這將大大減少CPU的消耗,但是這樣會(huì)產(chǎn)生很多的小內(nèi)存碎片,導(dǎo)致內(nèi)存泄漏
2、分配內(nèi)存大于128KB的時(shí)候,通過(guò)mmap函數(shù),在文件映射區(qū)域偷了一塊內(nèi)存,通過(guò)mmap函數(shù)申請(qǐng)的內(nèi)存,在free釋放掉后,會(huì)立即將內(nèi)存歸還給操作系統(tǒng),內(nèi)存得到真正的釋放,但是下次分配的時(shí)候,還是會(huì)進(jìn)行系統(tǒng)調(diào)用,觸發(fā)缺頁(yè)中斷,導(dǎo)致CPU的消耗過(guò)大,優(yōu)點(diǎn)是不會(huì)出現(xiàn)內(nèi)存碎片

malloc(1)會(huì)分配多大的內(nèi)存?

不會(huì)只分配1字節(jié),一般會(huì)分配多一點(diǎn),可能睡132K字節(jié)的內(nèi)存

free釋放內(nèi)存,會(huì)歸還給操作系統(tǒng)嗎?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容