kobe's profileKobeSoftPhotosBlogLists Tools Help

Blog


    October 29

    失败的boost::object_pool

        boost::object_pool绝对是一个超失败的设计!该内存池模块,基于sss(simple segregated storage),以32为长为block大小,成倍增长,本来挺好的设计思想,利用了chunks空间存free list既节省了overhead空间又节省free list空间,还包装了对象构造和析构,但就是毁在了它的释放操作。真是不看代码不知道,一看吓一跳,它的释放效率居然是O(N),原因在于它的free list不同于boost::pool的free list,它的free list是有序的,我理解设计者的目的,因为有序的free list可以保证在最终垃圾回收时的效率保持在O(N)(否则是O(N*N)),但设计者难道不知道释放chunk的使用频率远远大于最终回收时的一次吗?鬼才会使它呢,真是失败中的失败。。。遗憾啊
        补救的方法一个是使pool代替(但这样就会丧失面向对象操作的遍历,比如需要自己调用构造析构等),或者自己写一个object_pool的版本。
    PS:顺便搜了一下,拍的人还不少,http://lists.boost.org/boost-users/2007/03/25888.php