tbb还是tcmalloc性能比较,vs2010

网上对于tbb和tcmalloc的介绍一堆,到底哪个效率高,,亲手测测,以飨读者。

1.tbb的用法,编译tbb工程生成相应文件。注意其中的***_debug.lib 是我手动修改文件名***.lib 得到的,哈哈,方法比较低俗。


tbb还是tcmalloc性能比较,vs2010_第1张图片

2. 新建一个控制台程序,设置项目路径(include的路径都需要设置),将我们生成的lib和dll文件都拷贝到当前工程的文件夹下面,tbb的工程不需要设置“输入库(lib文件)(例如tcmalloc就需要,“附件依赖”库,如第5步所示),因为在tbb的头文件会帮我们自动引入依赖的tbb 库(头文件里用到的是#pragma comment(lib,"tbb_**.lib")的语句)。

3. 在源文件中包含#include <tbb/tbbmalloc_proxy.h>  即可

4. tcmalloc 的设置,先编译生成lib文件和dll文件。

5. 设置用到的tcmalloc lib文件,并且要设置一个特殊的连接器选项:如图

tbb还是tcmalloc性能比较,vs2010_第2张图片

6. 将生成的tcmalloc相关的dll文件拷贝到 exe生成目录,如图:

tbb还是tcmalloc性能比较,vs2010_第3张图片

 7 ok了,贴代码,其中有结果,何不在你自己的电脑上面试一下。  

注意(1)用tcmalloc时保留“强制符号引用”的链接选项,去掉tbb相关头文件包含。

(2) 用tbb时保留头文件包含, 去掉“强制符号引用”的链接选项

(3)用系统默认malloc时,把头文件和”强制符号引用”的链接选项都干掉

#include <Windows.h>
#include <iostream>
#include <malloc.h>
//#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;
}

// tbb 运行结果 	797
// win 系统运行结果 	1594
// tcmalloc 运行结果  984  (__tcmalloc;%(ForceSymbolReferences) //这是tcmalloc的连接选项)


确实都比系统自带的强一些,,你会选择哪个呢?  

欢迎朋友们留言,,得到回音是幸福的!!


你可能感兴趣的:(性能,TCMALLOC,TBB)