vs2015使用tcmalloc(windows)

编译lib库

1、https://github.com/gperftools/gperftools  去tag中下载了2.4版本(最新的2.9.1版本 用了c++17的新特性折叠表达式,vs2015不支持  有2个unittest测试用例工程编译失败)

2、在下载的目录中 .sln 打开vs工程

3、配置x64环境  (可以仿照下默认x86配置修改)

4、编译生成 libtcmalloc_minimal.lib

 

2.4.91 版本也有2个unittest工程编译失败,跟编译器有关,在vs2019中可以编译通过。

vs2015表现

// a.cpp文件
namespace
tcmalloc { bool EnterStacktraceScope(void) { return true; } }
// b.cpp文件
namespace
tcmalloc { bool EnterStacktraceScope(void); } int main() { tcmalloc::EnterStacktraceScope(); system("pause"); return 0; }

链接报错:

error LNK2019: 无法解析的外部符号 "bool __cdecl tcmalloc::EnterStacktraceScope(void)" (?EnterStacktraceScope@tcmalloc@@YA_NXZ),函数 _main 中引用了该符号
1>C:\Users\Floyd\source\repos\learnCpp\Debug\learnCpp.exe : fatal error LNK1120: 1 个无法解析的外部命令

使用vs2019(语言标准c++14/c++17)都不会出现该报错。

 

使用:

1、使用dll的方式    配置链接器  常规-》 附加库目录  和   输入-》附加依赖项,并把对应的dll拷贝到exe目录下

2、需要在工程项目属性==》链接器 ==》输入=》强制符号引用中加入 __tcmalloc

3、用malloc 和 free 对小内存简单分配测试,速度变为了原来的3倍多

 

FAQ:

修改x64环境遇到的问题:

1、LINK : warning LNK4078: multiple “.text” sections found with different attributes (40000040)

  工程项目属性 ==》  c/c++ ==》代码生成 ==》 启动最小重新生成  ==》改为是(/Gm)

2、error LNK2019: 无法解析的外部符号 __imp___CrtDbgReportW

     工程项目属性->C/C++->代码生成-> 运行库, "多线程 (/MT) " 修改为 "多线程调试(/MTd)"

 

posted on 2021-09-15 16:42  心在哈尔滨  阅读(747)  评论(0编辑  收藏  举报

导航