這個想法是寫一個內存管理器,一次分配一堆內存,以最大限度地減少malloc和免費調用,我試着寫我的自我兩次,但兩次我遇到對內存進行碎片整理的問題。寫一個內存管理器和碎片整理內存
您可以每隔一段時間檢查一次塊是否爲空,如果它是空的,則刪除它。但假設你的塊是100個字節,首先分配20個字節的內存,這將創建一個新的100字節塊,因爲沒有塊存在,然後分配80個字節並填充第一個塊,然後再分配20個字節這將創建另一個新塊,因爲第一個塊已滿,然後釋放第二個分配(80個字節),併爲您留下兩個只使用前20個字節的塊,這意味着您已分配了100個字節通過將第二個塊的20個字節移動到第一個塊並刪除第二個塊來釋放。
這是我遇到的問題:
- 你不能左右移動存儲,因爲這意味着所有的指針到內存就必須更新,要做到這一點,你需要知道他們的地址,你不知道;
- 100字節是一個非常小的塊大小,如果我想要在內存中存儲非常低分辨率(64,64)的ARGB圖像呢?這將使用16KB的內存,並且移動所有內存甚至可能比根本不寫內存管理器要慢。
它甚至值得寫畢竟,一個自定義的內存管理器?
看看好友系統 - https://en.wikipedia.org/wiki/Buddy_memory_allocation –
你有*實際*性能問題,你需要解決?如果沒有,那麼我會說這是過早的優化。 –
大多數常用的malloc/free實現都是由具有豐富經驗的程序員編寫的,他們對問題領域有深入的瞭解,並隨着時間的推移考慮到實際使用中發現的任何缺陷。這並不意味着它們是最好的實現,但它表明你不可能在第一次嘗試時做得更好。 – rici