iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0

記憶體區塊稱為堆疊(heap),記憶體管理會有個控制塊,而這個控制塊在使用時,會將固定的區塊配置進去,裡面某些區塊可能不能使用或者不適用於這個控制塊的需求時,就會產生記憶體碎片,記憶體碎片普遍分成兩種:

(1)內部記憶體碎片:內部記憶體碎片是已經被分配出去的記憶體,卻不能被利用的記憶體。這種狀況,就是要等到最後任務結束後,才會在使用這些碎片。

(2)外部記憶體碎片:外部記憶體碎片是還沒有被分配出去的記憶體,但由於這些沒被分配出去的記憶體太小了,所以無法分配給空閒或新的記憶體區塊。

此外,如果有些記憶體區塊的任務引用了虛擬位址,就可以允許記憶體壓縮,但是,如果任務已經配置了記憶體區塊,那就不能夠將記憶體作壓縮了。

某些記憶體的也會對記憶體作架構上的特定需求,此時,就會需要記憶體對齊(memeory aligment),因此,記憶體的配置還是要看任務的需求來配置才行。

如上述所說,有些記憶體會成為碎片,或者閒置的狀態,那有沒有機會找到空閒的區塊呢?通常可以用函數來找出空閒的區塊,並且予以合併使用。

之前,我們提過嵌入式語法的記憶體是使用固定大小的記憶體池,如果一個成功的配置,通常就能有效地從記憶體池內,取得鎖鑰的記憶體區塊,不過,嵌入式與法的缺點,就是太多碎片會存在這個記憶體池內,使用效率上就會比較浪費了。


上一篇
Day 26 輸出輸入設備
下一篇
Day 28 同步的作用
系列文
ARM 組合語言:30天學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言