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