内存池和tcmalloc的性能比较

简介:

这次使用的内存池是原公司的,利用hash_map做的,大概的接口是这样:


template <class CObject>
class ObjectPool
{ <br>public:<br>    typedef hash_map<int64_t,ObjectBlock*> BlockMap;
    virtual int pop(CObject *&ob);
    virtual int push(const CObject *ob);<br>private:<br>    BlockMap _block_map;
};

写测试代码比较了一下内存池和tcmalloc的差距!结果挺让人吃惊!


#define MAX_SIZE 50000
 
 
struct MsgToPut
{
     UINT _wr_ptr;
     UINT _rd_ptr;
     UINT _length;
     CHAR _base[1024];
 
     void reset()
     {
         this->_rd_ptr = this->_wr_ptr = 0;
         this->_length = 1024;
     }
};
 
ObjectPool<MsgToPut> MsgPool;
 
void* newthread(void* argv)
{
    long long int start = get_os_system_time();
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        MsgToPut* msg;
        MsgPool.pop(msg);
        if(msg == NULL)
        {
            printf("error\n");
        }
    }
 
    long long int end = get_os_system_time();
 
    printf("newthread ObjectPool:%d\n",end - start);
 
 
    MsgToPut* mtp[MAX_SIZE];
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        mtp[i] = (MsgToPut*)tc_malloc(sizeof(MsgToPut));
        mtp[i]->reset();
    }
 
    start = get_os_system_time();
    printf("newthread tc malloc :%d\n",start - end);
 
    return (void*)0;
}
 
int main()
{
 
    pthread_t pid;
    pthread_create(&pid,NULL,newthread,NULL);
    pthread_create(&pid,NULL,newthread,NULL);
    pthread_create(&pid,NULL,newthread,NULL);
 
    long long int start = get_os_system_time();
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        MsgToPut* msg = NULL;
        MsgPool.pop(msg);
        if(msg == NULL)
        {
            printf("error\n");
        }
    }
 
    long long int end = get_os_system_time();
 
    printf("main ObjectPool:%d\n",end - start);
 
 
    MsgToPut* mtp[MAX_SIZE];
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        mtp[i] = (MsgToPut*)tc_malloc(sizeof(MsgToPut));
        mtp[i]->reset();
    }
 
    start = get_os_system_time();
    printf("main tc malloc :%d\n",start - end);
 
    return 0;
}

普遍打印数据为:

newthread ObjectPool:189
newthread ObjectPool:202
newthread tc malloc :24
newthread tc malloc :20
main ObjectPool:235
newthread ObjectPool:235
main tc malloc :21
newthread tc malloc :22


相关文章
|
1月前
|
缓存 算法 Java
Java内存管理:优化性能和避免内存泄漏的关键技巧
综上所述,通过合适的数据结构选择、资源释放、对象复用、引用管理等技巧,可以优化Java程序的性能并避免内存泄漏问题。
28 5
|
2月前
|
存储 设计模式 缓存
C++享元模式探索:轻松优化内存使用和性能提升之道
C++享元模式探索:轻松优化内存使用和性能提升之道
41 0
|
2月前
|
存储 缓存 算法
深入探究LRU缓存机制:优化内存利用与提升性能
深入探究LRU缓存机制:优化内存利用与提升性能
174 1
|
2月前
|
监控 Java 编译器
Go语言内存与并发性能综合优化策略
【2月更文挑战第11天】Go语言以其高效的并发处理能力和简洁的内存管理机制成为了现代软件开发中的热门选择。然而,在实际应用中,如何综合优化Go程序的内存使用和并发性能,仍然是一个值得探讨的话题。本文将深入探讨Go语言内存与并发性能的综合优化策略,包括内存布局优化、并发模式设计、资源池化以及性能监控与分析等方面,旨在帮助开发者全面提升Go程序的整体性能。
|
3月前
|
监控 Java 编译器
优化Go语言程序中的内存使用与垃圾回收性能
【2月更文挑战第5天】本文旨在探讨如何优化Go语言程序中的内存使用和垃圾回收性能。我们将深入了解内存分配策略、垃圾回收机制,并提供一系列实用的优化技巧和建议,帮助开发者更有效地管理内存,减少垃圾回收的开销,从而提升Go程序的性能。
|
4月前
|
存储 编译器 Linux
【探讨C++内存管理:有效避免内存泄漏与提高性能的关键】(下)
【探讨C++内存管理:有效避免内存泄漏与提高性能的关键】
|
4月前
|
存储 算法 Java
内存管理探秘:自动化与性能的完美平衡
内存管理探秘:自动化与性能的完美平衡
35 0
|
4月前
|
存储 C语言 C++
【探讨C++内存管理:有效避免内存泄漏与提高性能的关键】(上)
【探讨C++内存管理:有效避免内存泄漏与提高性能的关键】
|
4月前
|
存储 机器学习/深度学习 人工智能
阿里云倚天云服务器计算型c8y、通用型g8y、内存型r8y实例性能介绍及活动价格参考
计算型c8y、通用型g8y、内存型r8y是阿里云推出的基于ARM架构的新一代阿里自研倚天实例,采用阿里自研倚天710处理器,基于最新一代CIPU架构,通过芯片快速路径加速手段实现计算、存储、网络性能的大幅提升。其中计算型c8y实例网站应用、各种类型和规模的企业级应用,通用型g8y实例适用于网站应用、各种类型和规模的企业级应用,内存型r8y实例适用于网站应用、各种类型和规模的企业级应用。本文为大家详细介绍倚天云服务器实例的主要性能和最新活动价格情况。
阿里云倚天云服务器计算型c8y、通用型g8y、内存型r8y实例性能介绍及活动价格参考
|
4月前
|
存储 弹性计算 安全
阿里云七代云服务器计算型c7、通用型g7、内存型r7实例性能介绍及活动价格参考
阿里云第7代云服务器主要实例规格包括计算型c7、通用型g7、内存型r7,其中计算型c7实例适用于计算密集型业务,如Web服务器Apache、Nginx等场景,通用型g7实例适用于通用业务,如网站应用、各类企业级应用、中间件,内存型r7实例适用于内存密集型业务,如数据库系统、缓存、搜索集群。本文为大家详细介绍七代云服务器实例的主要性能和最新活动价格情况。
阿里云七代云服务器计算型c7、通用型g7、内存型r7实例性能介绍及活动价格参考