1

为什么会选择使用ordered_free()而不是free()使用 Boost 池?假定ordered_free()总是O(n)同时free()应该是O(1)。碎片更少有什么好处吗?我的用例是在高性能服务器中使用 Boost 池,该服务器将全天运行,全天进行大量分配和解除分配。

4

1 回答 1

4

该文档回答了这个问题:

有序池按照每个空闲块的地址顺序维护它的空闲列表 - 如果您可能分配对象数组,这是最有效的方式。然而,释放一个对象在当前空闲块的数量上可能是 O(N),这在某些情况下可能会非常昂贵。

无序池不会以任何特定顺序维护它的空闲列表,因此分配和释放单个对象非常快,但分配数组可能会很慢(特别是池可能不知道它包含足够的空闲内存用于分配请求,并不必要地分配更多内存)。

于 2012-08-28T17:43:50.620 回答