为什么测试的TCMalloc不靠谱,性能反而差了

sim13555965759 2013-02-14 04:15:16
不说话,直接上码:
不说话,直接上码:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>

#ifdef _DEBUG
#pragma comment(lib, "libtcmalloc_minimal-debug.lib")
#else
#pragma comment(lib, "libtcmalloc_minimal.lib")

#endif

int _tmain(int argc, _TCHAR* argv[])
{


DWORD pre = GetTickCount();
int i;
for ( i=0; i<100000; i++)
{
char * p1= new char[100];
char * p2= new char[200];
char * p3= new char[300];
char * p4= new char[500];

delete [] p1;
delete [] p2;
delete [] p3;
delete [] p4;
// char * p1=(char*)malloc(100);
// char * p2= (char*)malloc(200);
// char * p3= (char*)malloc(300);
// char * p4= (char*)malloc(500);
//
// free(p1);
// free(p2);
// free(p3);
// free(p4) ;
}
std::cout <<i<<"times cost (ms)"<< GetTickCount()-pre;
getchar();
return 0;

}
测试结果:
不加TC, 78ms
加 了TC,反而更长,156ms

环境:winxp sp3 vc2008
...全文
1322 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sim13555965759 2013-03-29
  • 打赏
  • 举报
回复
重新做了个随机申请内存的,还是在win下测试,发现确实在release下性能用了tcmalloc后提升很多时间缩短了100%以上,但是debug下还是不如不用tcmal的
nightkids_008 2013-02-20
  • 打赏
  • 举报
回复
你测试的场景太简单那了吧,tcmalloc要在非常频繁的内存申请释放时候才能显示出优势吧。
sim13555965759 2013-02-20
  • 打赏
  • 举报
回复
引用 12 楼 stjay 的回复:
这种测试代码是不靠谱的 因为这种申请后马上释放,再申请,可能会复用前一次的内存(释放给系统后,不会马上归还到虚拟/物理内存) 公平的测试方法是随机分配(随机大小)、随机释放 还有tcmalloc在多线程才显优势
随机大小,那好,我重新做一个随机大小的
sim13555965759 2013-02-18
  • 打赏
  • 举报
回复
引用 8 楼 dtgdf2001 的回复:
那是因为MSVC已经默认用上了内存池,tcmalloc的内存池效率不如ms的。
你确信?我还不知道
sim13555965759 2013-02-18
  • 打赏
  • 举报
回复
引用 7 楼 taodm 的回复:
没有哪种内存分配方案是在所有场合都胜出的,一般“优秀”的方案经常是以在最简单的场合有着比较差的表现来换取更多场合的较好表现。 楼主就别瞎折腾地测试了。
我就是想在实际项目中使用,但是用之前想看看是不是会有效,结果这样就不敢用了
stjay 2013-02-18
  • 打赏
  • 举报
回复
这种测试代码是不靠谱的 因为这种申请后马上释放,再申请,可能会复用前一次的内存(释放给系统后,不会马上归还到虚拟/物理内存) 公平的测试方法是随机分配(随机大小)、随机释放 还有tcmalloc在多线程才显优势
赵4老师 2013-02-18
  • 打赏
  • 举报
回复
使用电脑计时有时误差会很大,因为待测程序段的运行会影响电脑时钟。 将待测程序段循环足够多次,手动掐秒表计时可能更准确。
可见一斑 2013-02-17
  • 打赏
  • 举报
回复
那是因为MSVC已经默认用上了内存池,tcmalloc的内存池效率不如ms的。
taodm 2013-02-15
  • 打赏
  • 举报
回复
没有哪种内存分配方案是在所有场合都胜出的,一般“优秀”的方案经常是以在最简单的场合有着比较差的表现来换取更多场合的较好表现。 楼主就别瞎折腾地测试了。
qq120848369 2013-02-15
  • 打赏
  • 举报
回复
还不如用tmalloc
sim13555965759 2013-02-15
  • 打赏
  • 举报
回复
引用 2 楼 shit_moment 的回复:
有个单位错了,应该是20ms 建议把for循环的限制次数加大1000倍数,那样或许会好一点。 引用 1 楼 shit_moment 的回复: 相同的代码在我的电脑上3次测试,结果相差均不超过20ms,malloc略胜 VS2010 WINXP(SP3) DEBUG --- PS: 《windows核心编程》第五版中提到,GetTickCount不能真实的反应出耗时,应该用……
是不能反映真实耗时,但是我只是想看看TCMalloc是否有效,结果让我失望,按道理不应该啊,tc是不少人推荐的的 我的cpu是AMD athlon X2 Dual 1.6G
sim13555965759 2013-02-15
  • 打赏
  • 举报
回复
引用 3 楼 omega_sta 的回复:
std::out本来就慢,用printf
这个不关out的事啊,是说同样 的代码,用了tcmalloc反而性能下降,我很奇怪是为什么捏
Saingel 2013-02-15
  • 打赏
  • 举报
回复
std::out本来就慢,用printf
唯恐天下不乱 2013-02-14
  • 打赏
  • 举报
回复
有个单位错了,应该是20ms 建议把for循环的限制次数加大1000倍数,那样或许会好一点。
引用 1 楼 shit_moment 的回复:
相同的代码在我的电脑上3次测试,结果相差均不超过20ms,malloc略胜 VS2010 WINXP(SP3) DEBUG --- PS: 《windows核心编程》第五版中提到,GetTickCount不能真实的反应出耗时,应该用什么忘了。对这个不是很关心,所以自己就没有测试了。 还有一点windows并不是实时操作系统,有人说windows只能保证15……
唯恐天下不乱 2013-02-14
  • 打赏
  • 举报
回复
相同的代码在我的电脑上3次测试,结果相差均不超过20s,malloc略胜 VS2010 WINXP(SP3) DEBUG --- PS: 《windows核心编程》第五版中提到,GetTickCount不能真实的反应出耗时,应该用什么忘了。对这个不是很关心,所以自己就没有测试了。 还有一点windows并不是实时操作系统,有人说windows只能保证15ms的误差,有人说只能保证50ms。具体不得而知了。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧