账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    STL中的内存池的效率是不是不如原生的快啊?
    58
    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/...

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 是的,STL中的内存池的效率相对于原生的会稍低一些。

      原生的内存管理在大多数情况下都比STL的内存池更高效,因为它在分配和回收内存时有更明确的规则和更好的空间利用率。原生的内存池可能需要更频繁地进行分配和回收,从而降低了性能。

      然而,STL中的内存池提供了更高级别的抽象,可以在很大程度上简化内存管理的工作。例如,STL中的内存池可以自动管理内存分配和回收,避免了手动进行这些工作时的复杂性。此外,STL中的内存池还可以支持多种类型的内存池,包括标准内存池、弱引用内存池、弱引用加固定大小的内存池等,这些都提供了更多的灵活性和可扩展性。

      总的来说,原生的内存管理在大多数情况下都比STL的内存池更高效,但在某些特定的场景下,STL的内存池可以提供更多的灵活性和可扩展性。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部