这次使用的内存池是原公司的,利用hash_map做的,大概的接口是这样:
templateclass ObjectPool{ public: typedef hash_map BlockMap; virtual int pop(CObject *&ob); virtual int push(const CObject *ob); private: BlockMap _block_map;};
写测试代码比较了一下内存池和tcmalloc的差距!结果挺让人吃惊!
#define MAX_SIZE 50000struct MsgToPut{ UINT _wr_ptr; UINT _rd_ptr; UINT _length; CHAR _base[1024]; void reset() { this->_rd_ptr = this->_wr_ptr = 0; this->_length = 1024; }};ObjectPoolMsgPool;void* newthread(void* argv){ long long int start = get_os_system_time(); for(int i=0;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 reset(); } start = get_os_system_time(); printf("main tc malloc :%d\n",start - end); return 0;}
普遍打印数据为:
newthread ObjectPool:189
newthread ObjectPool:202newthread tc malloc :24newthread tc malloc :20main ObjectPool:235newthread ObjectPool:235main tc malloc :21newthread tc malloc :22