生活随笔
收集整理的這篇文章主要介紹了
内存池和tcmalloc的性能比较
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這次使用的內(nèi)存池是原公司的,利用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;
};
寫測(cè)試代碼比較了一下內(nèi)存池和tcmalloc的差距!結(jié)果挺讓人吃驚!
#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;}
};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;
}
普遍打印數(shù)據(jù)為:
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
總結(jié)
以上是生活随笔為你收集整理的内存池和tcmalloc的性能比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。