STL中的内存池的效率是不是不如原生的快啊?

1.我仿照sgi-STL的空间配置器,实现了一个内存池,基本跟其完全一样,但是我写完之后,测试其分配回收内存的速度并不快,要比直接用malloc free还慢一些。
2.是否内存池主要解决的是内存碎片问题,而对效率的提升并不明显,还是我实现的有问题?
使用内存池要1.5s左右,直接用malloc free是1s左右,这是测试用的代码:

#include <iostream>
#include <cstdlib>
#include <vector>
#include <ctime>
#include "memorypool.h"
using namespace std;
//#define USEPOOL

int main(){
    MemoryPool pool(10);
    clock_t start,end;
    int sum=0;
    vector<int> randnum(20005);
    for(int i=0;i<20000;i++){
        randnum[i]=rand()%128;
    }

#ifdef USEPOOL
    for(int i=0;i<80;i++){
        start=clock();
        for(int i=0;i<20000;i++){
            char *p=(char*)pool.allocate(randnum[i]);

            pool.deallocate(p,randnum[i]);
        }
        end=clock();
        sum+=(end-start);
    }
    cout<<"MemoryPool:20000次申请释放内存(0-128bytes)用时:"<<sum/80<<"毫秒"<<endl;
#else
    sum=0;
    for(int i=0;i<80;i++){
        start=clock();
        for(int i=0;i<20000;i++){
            char *p=(char*)malloc(randnum[i]);
            free(p);
        }
        end=clock();
        sum+=(end-start);
    }
    cout<<"原生api:20000次申请释放内存(0-128bytes)用时:"<<sum/80<<"毫秒"<<endl;

#endif

    return 0;
}

源码在这里:https://github.com/TWS-YIFEI/...

阅读 3.1k
1 个回答

boost 的我在实际项目中用过,效率还是很高的。不过内部逻辑没仔细看过。

memory pool 应该通常都是放大量 同样 的对象的。这样分配回收就非常简单。你这样想分配任意长度的内存,效率可能不容易写得特别快。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题