因為我們是要實現記憶體分配器,我們無法向未實現的記憶體分配器申請記憶體,所以我們無法將空閒塊掛載在鍊錶下。
解決辦法:將維護記憶體塊的分配資訊儲存在記憶體塊本身中。需要包括知道的資訊:1)乙個標識記憶體塊是否空閒的標記;2)乙個標識記憶體塊大小的標記
3、劃分記憶體塊
為防止內部碎片,假設申請的是 16 b,而返回的是 32 b,我們要將空閒記憶體塊進行劃分,前一部分設定為已分配,返回給記憶體使用者,後一部分變為乙個新的空閒記憶體塊。
4、合併空閒記憶體塊
最為簡單的合併策略就是釋放記憶體時立即合併記憶體塊。根據記憶體塊頭部資訊,可以很清楚地知道下乙個記憶體的資訊,那如何知道上乙個記憶體塊的資訊呢?
解決辦法:在記憶體塊的尾部新增 footer。上一記憶體塊的 footer 和下一記憶體塊的 header 是相鄰的。
思考問題的方法
1.極限法 今天看到hash表,說要讓hash表上的鍊錶分布的均勻才是好的hash函式.當時就在想為啥要分散均勻呢?靈光一閃,如果所有鍊錶都在乙個雜湊值下的,那麼資料查詢起來不就又回到了o n 了嗎?那使用hash表的意義就不存在了.因為hash表在沒有衝突時的時間複雜度是o 1 2.多去模擬 比如...
記憶體分配 定長記憶體分配器
在各種記憶體分配演算法中,有一種很實用,實現起來也簡單 定長的記憶體分配器。即每次分配的記憶體大小是固定的。大概邏輯是 在一些區域性的單執行緒邏輯中,可以有效提高效率。很短,很容易看懂 fallocator.h pragma once 固定長度的記憶體分配器 include include incl...
記憶體分配器一
glibc記憶體管理學習 x86平台linux程序記憶體布局 text elf格式程式 data 程式執行時就能確定的資料,可讀可寫 bss 沒有初始化的全域性變數和靜態表裡 heap stack 由編譯器自動分配釋放,存放函式引數 區域性變數等 mmap 對映區域 實現乙個malloc 分頁與位址...