win32测试Tcmalloc性能

来源:互联网 发布:linux更改用户权限 编辑:程序博客网 时间:2024/05/21 22:47

1>.编译代码库

从github上下载 gperftools 最新的库,根据介绍分别将 gperftools.sln 复制出  gperftools-vs15.sln / gperftools-vs10.sln.

编译 libtcmalloc_minimal project.得到  Relase/libtcmalloc_minimal.dll 和 libtcmalloc_minimal.lib

放到:  D:\...\stack-lang-cpp\Tcmalloc\lib\vs15_x86


2>.一些bug解决。

log2 找不到,就定义一个

inline double log2( double n )  {  // log(n)/log(2) is log2.  return log( n ) / log( 2.0 );  }  


std::max()/std::min()失败,就改成强制函数调用,避免当成宏扩展:

#include <algorithm>(std::max)(...)(std::min)(...)

.... 自行解决


2>.配置路径:

VC++目录:    D:\...\stack-lang-cpp\Tcmalloc\lib\vs15_x86,主要是 搜索到 libtcmalloc_minimal.lib

其中path配置到:   D:\...\stack-lang-cpp\Tcmalloc\lib\vs15_x86  , 主要是搜索到 libtcmalloc_minimal.dll


3>.测试

建立自动符号链接cpp

tcmalloc-include.cpp#pragma comment(lib , "libtcmalloc_minimal")#pragma comment(linker, "/include:__tcmalloc")

测试Demo:

tcmalloc-test.cpp#include <laok/job_runner/include.h>/************************************************************************//* *//************************************************************************/#define COUNT 1000000static void test_func(){    for (size_t i = 0; i < COUNT; ++i)    {        int * pInt = (int*)malloc(i * sizeof(int));        *pInt = i;        free(pInt);    }}JOB_DEFINE(tcmalloc , test){    std::clock_t start = std::clock();    test_func();    std::clock_t end = std::clock();    PS( end - start );}


运行方式: 

1.包含tcmalloc-include.cpp

测试时间:

=====<tcmalloc_test>begin[end - start]:[116]=====<tcmalloc_test>end [State:OK] [Times:0.117s]


2.不包含tcmalloc-include.cpp

测试时间

=====<tcmalloc_test>begin[end - start]:[2142]=====<tcmalloc_test>end [State:OK] [Times:2.144s]



由此可见,性能还是有点差异,尤其是对 大量小对象的不均匀分配。