为什么会选择使用ordered_free()
而不是free()
使用 Boost 池?假定ordered_free()
总是O(n)
同时free()
应该是O(1)
。碎片更少有什么好处吗?我的用例是在高性能服务器中使用 Boost 池,该服务器将全天运行,全天进行大量分配和解除分配。
问问题
630 次
1 回答
4
该文档回答了这个问题:
有序池按照每个空闲块的地址顺序维护它的空闲列表 - 如果您可能分配对象数组,这是最有效的方式。然而,释放一个对象在当前空闲块的数量上可能是 O(N),这在某些情况下可能会非常昂贵。
无序池不会以任何特定顺序维护它的空闲列表,因此分配和释放单个对象非常快,但分配数组可能会很慢(特别是池可能不知道它包含足够的空闲内存用于分配请求,并不必要地分配更多内存)。
于 2012-08-28T17:43:50.620 回答