1
A
回答
1
是,哈希表!所以你有一個大的散列表,其中包含空閒塊的大小作爲鍵,值是數組,指向相應大小的塊。所以,每次釋放一個塊:
hash[block.size()].append(block.address())
而且每次分配空閒塊:
block = hash[requested_size].pop()
這種方法的問題是有太多的可能的塊大小。因此散列會填滿數百萬個密鑰,浪費大量內存。
因此,你可以有一個列表,並遍歷它找到一個合適的塊:
for block in blocks:
if block.size() >= requested_size:
return blocks.remove(block)
內存使用效率,但是緩慢的,因爲你可能有過百萬塊進行掃描。
所以你要做的就是結合這兩種方法。如果將分配量設置爲64,那麼包含256個大小類的散列可以用於最大64 * 256 = 16 kb的所有分配。大於您存儲在樹中的塊,該樹會給您O(日誌N)插入和刪除。
相關問題
- 1. Codeigniter可變長度參數列表
- 2. 可變長度模板參數列表?
- 3. 使用printf的可變長度空間
- 4. 如何訪問R中列表中的可變長度列表
- 5. 轉換可變長度列表分成邊列表的igraphř
- 6. 傳遞變量的可變長度的參數列表在PHP
- 7. fscanf()/ sscanf() - 匹配可變長度空格?
- 8. SQL中的可變長度int列
- 9. 可變長度的靜態陣列
- 10. 連續,固定長度的可變長度序列批次
- 11. Power Query - 按可變字段長度拆分列 - 佔空值
- 12. 可變蜱長度
- 13. Tensorflow可變長度
- 14. SilverStripe 3.1:將列表劃分爲垂直列(可變長度)
- 15. 含有重新排列可變長度
- 16. 可變長度的String.Format
- 17. 可變長度的NVARCHAR?
- 18. PhysicalAddress的可變長度
- 19. Python將長度可變的列表寫入txt文件
- 20. 分組的可變長度嵌套元組列表
- 21. 帶有多個可變長度元素的Python列表理解?
- 22. 創建ctypes的可變長度ARG列表
- 23. 帶有可變長度輸出的列表理解
- 24. 功能的可變長度參數列表
- 25. Erlang函數參數列表的可變長度
- 26. asp.net MVC 3可變長度的編輯列表
- 27. 在MATLAB中創建可變長度數組的列表
- 28. 分配在可變長度表
- 29. 編輯可變長度列表時保留ViewData
- 30. Python:各種列表到笛卡兒積,可變長度
有很多不同的選擇,從基本的,但簡單的代碼,線性表,因爲你已經提到的,它由一系列平衡樹的散列桶來隔離不同大小的分配,這是一個「清單」要正確編寫代碼相當困難,並且其中還有許多其他選項。這一切都取決於你需要什麼,你願意花費多少工作來獲得它 - 編程中的一個常見主題...... – twalberg
@twalberg用例大致是這樣的:我有一個圖,其中每個節點(和邊緣)可以具有與它們中的每一個相關聯的任意數量的鍵值對。我需要將這些文件存儲在一個文件中,這樣我可以a)根據節點+密鑰對O(1)值進行訪問,b)有一種方法可以知道與節點相關的所有密鑰。所以對於a)哈希表將很好地工作,但它不允許b)。因此我需要以某種方式以不同的方式存儲它。 – Resurrection