pizzx
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 21 文章 - 0 trackbacks - 0
<
2014年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
c++/boost(21)
mongodb
随笔档案
2014年8月 (5)
2014年7月 (9)
2014年6月 (6)
2014年5月 (1)
文章分类
C/C++
LINUX
网络编程
搜索
最新评论
阅读排行榜
1. glog日志开源库使用小结(10236)
2. boost pool实现详解(5235)
3. boost noncopyable实现禁止类拷贝(3851)
4. float 大小比较(2872)
5. boost::circular_buffer的push_back分析(2614)
评论排行榜
1. float 大小比较(0)
2. linux64位编译32位汇编指令不兼容(0)
3. boost noncopyable实现禁止类拷贝(0)
4. c++安全scope作用域释放资源二(0)
5. operator new总结(0)
tcmalloc性能测试对比
使用tcmalloc测试多线程分配对象
#include
<
boost
/
thread.hpp
>
#include
<
boost
/
bind.hpp
>
#include
<
boost
/
shared_ptr.hpp
>
#include
<
boost
/
progress.hpp
>
#include
<
vector
>
template
<
int
N
>
class
TestObjects
{
public
:
private
:
enum
{ size
=
N
*
1024
}
;
char
m_content[size];
}
;
template
<
int
N
>
void
mallocobjectfunc()
{
typedef TestObjects
<
N
>
TObject;
int
n
=
0
;
for
(; n
<
100
; n
++
)
{
{
std::vector
<
boost::shared_ptr
<
TObject
>
>
m_vobjc;
m_vobjc.reserve(
10000
);
int
i
=
0
;
for
(; i
<
10000
; i
++
)
{
boost::shared_ptr
<
TObject
>
p(
new
TObject);
m_vobjc.push_back(p);
}
}
}
}
int
main()
{
//
单线程测试
//
测试小于32K 小对象
{
boost::progress_timer pt;
mallocobjectfunc
<
14
>
();
}
//
测试大于32K 小对象
{
boost::progress_timer pt;
mallocobjectfunc
<
40
>
();
}
//
多线程
//
测试小于32K 小对象
{
boost::progress_timer pt;
boost::thread t1(boost::bind(
&
mallocobjectfunc
<
12
>
));
boost::thread t2(boost::bind(
&
mallocobjectfunc
<
12
>
));
boost::thread t3(boost::bind(
&
mallocobjectfunc
<
12
>
));
boost::thread t4(boost::bind(
&
mallocobjectfunc
<
12
>
));
boost::thread t5(boost::bind(
&
mallocobjectfunc
<
12
>
));
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
}
//
测试大于32K 小对象
{
boost::progress_timer pt;
boost::thread t1(boost::bind(
&
mallocobjectfunc
<
35
>
));
boost::thread t2(boost::bind(
&
mallocobjectfunc
<
35
>
));
boost::thread t3(boost::bind(
&
mallocobjectfunc
<
35
>
));
boost::thread t4(boost::bind(
&
mallocobjectfunc
<
35
>
));
boost::thread t5(boost::bind(
&
mallocobjectfunc
<
35
>
));
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
}
return
0
;
}
测试结果:
glibc tcmalloc
单线程小内存 2.46 s 0.96 s
单线程大内存 2.59 s 1.11 s
多线程小内存 104.96 s 7.77 s
多线程大内存 143.13 s 18.74 s
可见在多线程小内存申请,tcmalloc效率比glibc效率提高了13倍。
posted on 2014-06-26 17:36
pizzx
阅读(1135)
评论(0)
编辑
收藏
引用
所属分类:
c++/boost
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
c11 ravlue test example 1
float 大小比较
boost noncopyable实现禁止类拷贝
c++安全scope作用域释放资源二
operator new总结
observer模式
float和int转换拾入分析
vtable ptr解析
get weakptr point from this
boost bind 引用计数生命周期
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理