【发布时间】:2021-06-23 06:29:01
【问题描述】:
实现一个总是以 (2) 的幂分配内存的内存分配器会更好吗?有没有其他有效的方法说 (8) 分配的倍数?分配逻辑是否会出现碎片问题,例如 (8) 的倍数分配?
【问题讨论】:
-
什么是二的幂次分配?您的意思是分配器仅分配大小(以字节为单位)1、2、4、8、16、32、64、128、256、512、1024 等的块,而不分配诸如 768 等大小的块?因为您的替代方案是 8 的倍数,这将允许 8、16、24、32、40、48 等等,包括 768。我不希望仅分配 2 的幂大小总体上是好的。
-
@EricPostpischil 我认为 OP 的意思是 2,4,6,8,10 ... 或 8,16,24,32 ....
-
IMO 它不会有任何区别。请记住,您也需要注意对齐方式
-
@EricPostpischil 是的,分配大小为 2、4、8、16、32、64、128 与 8、16、24、32、40、48 的块之间的比较。我已经编码了 2 的幂,评估如果我用 8 的倍数替换它是否会出现碎片问题。
-
@Ram:无论哪种方式都可能存在碎片问题,具体取决于分配代码的设计及其客户端的行为。有些程序会以导致更多碎片的方式分配和释放内存,而有些程序会以导致更少碎片的方式分配和释放内存。
标签: c unix memory-management operating-system malloc