Windows 下使用 tcmalloc

https://github.com/gperftools/gperftools
使用VS编译项目,将 libtcmalloc_minimal.lib 放到项目的lib目录下

添加库目录:
$(ProjectDir)lib

附加依赖项:
libtcmalloc_minimal.lib

强制符号引用:
__tcmalloc

测试代码

#include <Windows.h>
#include <iostream>
//#include <tbb/tbbmalloc_proxy.h> //这是tbb包含的头文件, win32系统默认malloc是只要注释该头文件引用
using namespace std;
// 执行多少轮
#define MAX_SCALE (4000)
//每轮生成 2 4 8 16     32 64 126 256   512  1024 2048 4096   。。。。共16种规格的内存
#define MAX_SIZE  16

DWORD WINAPI worker(LPVOID lpThreadParameter){
	int iterations = MAX_SCALE;
	void* ps[MAX_SCALE][MAX_SIZE];

	while(iterations-- ) {
		for (int i = 0; i < MAX_SIZE; i ++){
			int size = (int)pow(2.0, i);
			void * p = malloc(size);
			memset(p,0,size);
			ps[iterations][i] = p;
		}
	}

	iterations = MAX_SCALE;
	while(iterations-- ) {
		for (int i = 0; i < MAX_SIZE; i ++){
			free(ps[iterations][i]);
		}
	}
	return NULL;
}

void main(){
	int scale = 4;
	cout << "start " << endl;
	HANDLE* handles = new HANDLE[scale];
	cout << "HANDLE newed" << endl;
	DWORD start = ::GetTickCount();
	for (int i = 0; i < scale; i ++){
		DWORD threadID;
		handles[i] = CreateThread(0, 0x1000000000, worker, NULL, NULL, &threadID);
	}


	WaitForMultipleObjects(scale, handles, true, INFINITE);
	DWORD end = ::GetTickCount();
	cout << end-start << endl;
}

测试结果(毫秒)
tcmalloc 4 thread
1155
905
1045
952

msvcrt 4 thread
1997
2714
2777
2496

tbb 4 thread
905
889
920
858

tcmalloc 1 thread
796
780
843
858

msvcrt 1 thread
686
686
702
686

tbb 1 thread
734
718
686
702

tbb 4t 8000loop (crash!!!)
1732
1825
1794
1841

ms 4t 8000loop
16660
23462
21855
11013

tc 4t 8000loop
2200
2262
2200
2059