contributed by < chiacyu
>
1
在 pool_init
的過程中,需要透過一個 meta data
的資料結構來記錄這個 block
裡面的資訊,因此若是 size
小於 header_size
就會返回失敗。
round_up
程式將size
取至 32bit
or 64bit
的倍數。 在 enum
裡面可以看到,若 __SIZE_WIDTH__
在前置處理器時有被定義成 64
則 log2_word_size = 3
,此外則為 log2_word_size = 2
再來可以看到 pool_malloc()
來看看如何配置記憶體空間。首先透過 int _size = round_up(&size);
來取下一個 64bit
或 32bit
的倍數。
再來要檢查如果如果 pool
中的剩餘空間,透過 pool_free_space
來紀錄。 若是 pool_free_space
小於 header_size
則要馬上回傳 NULL
。
再來如果確認空間足夠,再來就是找到適合的 block
若是執行成功後 ret
則為分配的 block
地址。