在使用Boost池时,为什么要选择使用ordered_free()而不是free()?假设ordered_free()总是O(n),而free()应该是O(1)。有没有减少碎片化的好处?我的用例是在高性能服务器中使用Boost池,该服务器将全天运行,全天都有大量的分配和释放。
发布于 2012-08-29 01:43:51
The documentation回答了这个问题:
有序池按照每个空闲块的地址顺序维护它的空闲表-如果您可能要分配对象数组,这是最有效的方法。然而,在当前空闲块的数量中,释放对象的数量可以是O(N),在某些情况下,这可能是非常昂贵的。
无序池不会以任何特定顺序维护其空闲列表,因此分配和释放单个对象的速度非常快,但分配数组可能会很慢(尤其是池可能不知道它包含足够的空闲内存用于分配请求,并且不必要地分配更多内存)。
https://stackoverflow.com/questions/12164521
复制相似问题