您现在的位置是:首页 >学无止境 >windows下源码编译和使用TCMalloc网站首页学无止境
windows下源码编译和使用TCMalloc
简介windows下源码编译和使用TCMalloc
windows下源码编译和使用TCMalloc
环境:
OS: windows 10
编译器:vs2019
cmake: 3.22.1
tcmalloc: gperftools-2.10
前言
TCMalloc是Google开发的专用于多线程系统设计的内存分配器。如mysql、Nginx、Redis 高并发下的性能和内存优化等。
在一台2.8GHz的P4机器上执行一次小对象malloc及free,TCMalloc需要50纳秒,而glibc 2.3的malloc(ptmalloc2)需要300纳秒。
TCMalloc是google-perftools工具(TCMalloc、heap-checker、heap-profiler和cpu-profiler)之一。
完整的TCMalloc包含了heap-checker和heap-profiler功能,如果不需要这些功能,可以使用 tcmalloc_minimal。
程序中引入TCMalloc后,会自动替代系统的内存分配相关的malloc、free,new,delete等函数。
1. TCMalloc源码编译
wget https://github.com/gperftools/gperftools/archive/refs/tags/gperftools-2.10.tar.gz
解压后用vs打开gperftools.sln,修改编译方式:
- Debug:Debug版本动态库
- Release-Patch:Release版本动态库
- Release-Override:Release版本静态库
生成结果
$ tree
.
|-- Debug
| |-- libtcmalloc_minimal.dll
| |-- libtcmalloc_minimal.exp
| |-- libtcmalloc_minimal.lib
| `-- libtcmalloc_minimal.pdb
|-- Release-Override
| |-- libtcmalloc_minimal.lib
| `-- libtcmalloc_minimal.pdb
`-- Release-Patch
|-- libtcmalloc_minimal.dll
|-- libtcmalloc_minimal.exp
|-- libtcmalloc_minimal.lib
`-- libtcmalloc_minimal.pdb
2. TCMalloc的使用
2.1 CMake方式
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(main)
link_directories(.)
add_executable(${PROJECT_NAME} main.cpp)
target_link_options(${PROJECT_NAME} PRIVATE /INCLUDE:_tcmalloc)
target_link_libraries(${PROJECT_NAME} libtcmalloc_minimal)
2.2 手动添加到Vistual Studio
【项目】 -> 【属性】 -> 【链接器】 -> 【输入】 -> 【附加依赖项】 -> libtcmalloc_minimal.lib
【项目】 -> 【属性】 -> 【链接器】 -> 【输入】 -> 【强制符号引用】 -> _tcmalloc
3. 测试
main.cpp
#include <stdio.h>
#include <windows.h> // GetTickCount64 malloc
int main()
{
const int COUNT = 1000 * 10000;// 1000w
ULONGLONG start = GetTickCount64();
for (int i = 0; i < COUNT; ++i)
{
char* str = (char*)malloc(1025);
free(str);
}
printf("time: %llums
", GetTickCount64() - start);
return 0;
}
结果:
- TCMalloc: 78ms
- 系统malloc:437ms
Reference:
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。