win32测试Tcmalloc性能

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 1000000


static 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]



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






猜你喜欢

转载自blog.csdn.net/laoki/article/details/77372587