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]
由此可见,性能还是有点差异,尤其是对 大量小对象的不均匀分配。