windows下源码编译和使用TCMalloc

2023-05-16

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\n", GetTickCount64() - start);

	return 0;
}

结果:

  • TCMalloc: 78ms
  • 系统malloc:437ms

Reference:

  1. gperftools
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows下源码编译和使用TCMalloc 的相关文章

随机推荐

  • C++语言程序设计

    C 43 43 语言程序设计 如需转载请标明出处 xff1a http blog csdn net itas109 文章目录 C 43 43 语言程序设计1 语言概述1 1 字符集合1 2 词法记号关键字标识符文字操作符 运算符 分隔符空白
  • 查看C语言库函数源码

    查看C语言库函数源码 如需转载请标明出处 xff1a http blog csdn net itas109 文章目录 查看C语言库函数源码1 visual studio2 glibc3 llvm4 其他 例如查找string h头文件中的s
  • CSerialPort教程(9) - CSerialPort输出详细调试信息及日志

    CSerialPort教程 9 CSerialPort输出详细调试信息及日志 前言 CSerialPort项目是基于C 43 43 的轻量级开源跨平台串口类库 xff0c 用于实现跨平台多操作系统的串口读写 CSerialPort项目的开源
  • NodeJS输出内存使用信息到日志

    NodeJS输出内存使用信息到日志 如需转载请标明出处 xff1a http blog csdn net itas109 前言 内存信息是应用程序非常重要的信息 xff0c 尤其是在排查内存相关问题的时候 本文将介绍NodeJS如何输出内存
  • 使用Node.js版本管理工具管理多个Node.js版本

    使用Node js版本管理工具管理多个Node js版本 前言 本地开发时 xff0c 有时需要多个Node js版本进行验证 xff0c 因此需要一个Node js版本管理工具 Node js版本管理工具有很多 xff0c 如fnm nv
  • gitbook通过markdown制作电子书

    gitbook通过markdown制作电子书 环境 xff1a gitbook cli 2 3 2 2017 07 14 gitbook 3 2 3 2017 08 03 Node js 10 24 1 2021 04 06 npm 6 1
  • mdbook通过markdown制作电子书(代替gitbook)

    mdbook通过markdown制作电子书 代替gitbook 环境 xff1a mdbook v0 4 28 前言 gitbook制作电子书大家已经非常熟悉了 xff0c 但是对于gitbook工具官方已经不再维护了 xff0c 而且环境
  • 解决ubuntu 22.04 vmware无法共享文件问题

    解决ubuntu 22 04 vmware无法共享文件问题 环境 xff1a vmware 16 2 OS ubuntu 22 04 问题 安装完ubuntu 22 04后 xff0c vmtool安装报错 xff0c 无法使用共享文件和屏
  • 查看Android模拟器的实时日志

    查看Android模拟器的实时日志 环境 xff1a OS windows 10 adb 1 0 41 1 下载ADB https dl google com android repository platform tools latest
  • 心情不好

    今天知道了一个非常非常不好的消息 xff0c 突然感觉自己活得很窝囊 xff01 xff01 xff01 xff01 当兄弟有事需要帮忙的时候自己有了无能为力的感觉 所以 xff0c 要变强 xff0c 就算不为了自己 xff0c 也要为了
  • VS2019使用VLD(Visual Leak Detector)检测CPP内存泄漏

    VS2019使用VLD Visual Leak Detector 检测CPP内存泄漏 环境 xff1a 编译器 VS2019 VLD 2 5 1 前言 在windows平台下 xff0c VLD Visual Leak Detector 是
  • windows上Git Bash支持常用命令gcc tree zip wget cmake ninja

    windows上Git Bash支持常用命令gcc tree zip wget cmake ninja 前言 Git Bash基于MinGW64 提供了win32下的linux命令环境 xff0c 如ls cat tar等 但是Git Ba
  • MSVC和MinGW导出的.dll.a和.lib相互调用

    MSVC和MinGW导出的 dll a和 lib相互调用 如需转载请标明出处 xff1a http blog csdn net itas109 环境 xff1a OS windows 10 MinGW64 x86 64 8 1 0 rele
  • windows下源码编译QuickJS动态库

    windows下源码编译QuickJS动态库 如需转载请标明出处 xff1a http blog csdn net itas109 技术交流Q xff1a 129518033 前言 QuickJS是一个小型并且可嵌入的Javascript引
  • C/C++内存泄漏概述、分析、防范和排查

    C C 43 43 内存泄漏概述 分析 防范和排查 如需转载请标明出处 xff1a http blog csdn net itas109 技术交流Q xff1a 129518033 1 概念 狭义上 xff0c 内存泄漏是指动态分配的内存未
  • Linux使用asan排查C/C++内存泄漏

    Linux使用asan排查C C 43 43 内存泄漏 如需转载请标明出处 xff1a https blog csdn net itas109 技术交流 xff1a 129518033 环境 xff1a OS Ubuntu 20 04 Ce
  • windows下使用umdh定位C++内存泄漏

    windows下使用umdh定位C 43 43 内存泄漏 如需转载请标明出处 xff1a https blog csdn net itas109 技术交流 xff1a 129518033 环境 xff1a OS windows 10 190
  • Dear ImGui结合CMake实现基于GLFW和OpenGL3的入门级hello world代码

    Dear ImGui结合CMake实现基于GLFW和OpenGL3的入门级hello world代码 如需转载请标明出处 xff1a https blog csdn net itas109 技术交流 xff1a 129518033 环境 x
  • C++常用第三方库

    C 43 43 常用第三方库 如需转载请标明出处 xff1a https blog csdn net itas109 技术交流 xff1a 129518033 1 框架 Boost 通用C 43 43 标准库 Boost 5 6k 2023
  • windows下源码编译和使用TCMalloc

    windows下源码编译和使用TCMalloc 环境 xff1a OS windows 10 编译器 xff1a vs2019 cmake 3 22 1 tcmalloc gperftools 2 10 前言 TCMalloc是Google