windows下mingw32使用tcmalloc

使用的mingw: i686-8.1.0-release-posix-dwarf-rt_v6-rev0

           tcmalloc: gperftools2.7覆盖gperftools2.5

           msys2:    20180531,这个看起来不重要

1)github上,官方的gperftools已经是2.7,但是没有带configure文件,github上还有另外2个非官方tcmalloc,版本2.5,其中一个带configure文件。用2.7覆盖2.5,得到最终版本。2.5的也能用,就是有另外的编译错误要处理。

2)msys里执行./configure

3)修改makefile:CFLAG/CXXFLAGS由-g -O2改为-O3 -DPERFTOOLS_DLL_DECL=

4)preamble_patcher_with_stub.cc注释掉这个保护,看起来很恐怖,但是实际运行还没出错。由天命了。谁知道更好答案请告诉我啦,谢!

     } else if (IT_RETURN == instruction_type) {
//      SIDESTEP_ASSERT(false &&
//                      "Unable to patch because function is too short");
//      return SIDESTEP_FUNCTION_TOO_SMALL;

5) tcmalloc.h里 #if @ac_cv_have_std_align_val_t@ && __cplusplus >= 201703L去掉2个@字符

6)make

7)使用项目:

      在main函数或最早运行的函数所在文件#include

      并且在尽可能早的地方加全局变量:void * makeTCMallocUsed = tc_malloc(4);

     编译参数加:-DPERFTOOLS_DLL_DECL=

      链接参数加:-ltcmalloc_minimal -lpsapi

附加: 确认起效方法:thread_cache.h ThreadCache::Allocate函数里加点log输出。

总体来说,内存分配密集型多线程程序,总运行时间有望加快10%

 

你可能感兴趣的:(C/C++)