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

发布于 2022-09-11 22:09:41 字数 1453 浏览 17 评论 0

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/...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

快乐很简单 2022-09-18 22:09:41

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文