第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

malloc()如何在內(nèi)部實現(xiàn)?

malloc()如何在內(nèi)部實現(xiàn)?

C
大話西游666 2019-12-06 07:06:24
誰能解釋malloc()內(nèi)部工作原理?有時我已經(jīng)做完了,strace program而且我看到了很多sbrk系統(tǒng)調(diào)用,但都在man sbrk談?wù)撍氖褂们闆r,malloc()但僅此而已。
查看完整描述

3 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

簡單地說,malloc和自由工作是這樣的:

malloc提供對進程堆的訪問。堆是C核心庫(通常為libc)中的構(gòu)造,該構(gòu)造允許對象獲取對該進程堆上某些空間的排他訪問。

堆上的每個分配稱為堆單元。它通常由一個包含有關(guān)單元大小的信息的頭以及指向下一個堆單元的指針組成。這有效地使堆成為鏈表。

當啟動一個進程時,堆包含一個單元,該單元包含啟動時分配的所有堆空間。該單元格存在于堆的空閑列表中。

當一個調(diào)用malloc時,內(nèi)存將從大堆單元中獲取,這由malloc返回。其余部分組成一個新的堆單元,該堆單元由其余所有內(nèi)存組成。

當一個人釋放內(nèi)存時,堆單元將添加到堆的空閑列表的末尾。隨后的malloc在空閑列表中查找合適大小的單元。

可以預(yù)見的是,堆可能會碎片化,并且堆管理器可能會不時嘗試合并相鄰的堆單元。

當空閑列表上沒有剩余內(nèi)存可用于所需分配時,malloc調(diào)用brk或sbrk,這是系統(tǒng)調(diào)用,要求操作系統(tǒng)提供更多內(nèi)存頁。

現(xiàn)在進行了一些修改以優(yōu)化堆操作。

  • 對于較大的內(nèi)存分配(通常> 512字節(jié)),堆管理器可能會直接進入OS并分配完整的內(nèi)存頁面。

  • 堆可以指定最小分配大小,以防止發(fā)生大量碎片。

  • 堆也可以將自身劃分為bin,一個用于較小的分配,另一個用于較大的分配,以更快地進行較大的分配。

  • 還有一些優(yōu)化多線程堆分配的巧妙機制。



查看完整回答
反對 回復(fù) 2019-12-07
  • 3 回答
  • 0 關(guān)注
  • 496 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號