为什么使用Boost pool ordered_free()而不是free()?

时间:2012-08-28 17:32:54

标签: c++ memory-management

为什么在使用Boost池时会选择使用ordered_free()而不是free()?假设ordered_free()始终是O(n)free()应该是O(1)。在碎片较少的情况下是否有好处?我的用例是在高性能服务器中使用Boost池,该服务器将全天运行,并且全天都有大量的分配和解除分配。

1 个答案:

答案 0 :(得分:4)

The documentation回答了这个问题:

  

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

     

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