C++几种内存分配方法的效率测试与比较

这几天做的一个项目要频繁new许多对象,对于频繁调用new对效率的影响只停留在理论上,没有一个直观的认识,故做了一个小测试。本次测试只对比了三种内存分配方式:

1. 频繁调用new

2. 一次性new足够的内存,再用placement new产生对象到已分配的内存

3. 用vector

测试代码如下

#include <iostream>
#include <time.h>
#include <vector>
using namespace std;

#define MAX_CYCLE 30000000

class CTest
{
private:
	//int ID;
	//int ID2;
	//double ID3;
	char a[3];
};

inline void use_new()
{
	for(int i = 0; i < MAX_CYCLE; i++)
		delete new CTest();
}

inline void use_pool()
{
	CTest* pTest = new CTest[MAX_CYCLE];
	int len = sizeof(CTest);
	memset(pTest, 0, MAX_CYCLE * len);
	for(int i = 0; i < MAX_CYCLE; i++)
		new(pTest + i * len) CTest;
	delete [] pTest;
}

inline void use_vector()
{
	vector<CTest> testVec(MAX_CYCLE);
}

int main()
{
	time_t timer1, timer2;

	time(&timer1);
	//use_new();
	time(&timer2);
	cout<< difftime(timer2, timer1)<<endl;

	time(&timer1);
	//use_pool();
	time(&timer2);
	cout<< difftime(timer2, timer1)<<endl;

	time(&timer1);
	use_vector();
	time(&timer2);
	cout<< difftime(timer2, timer1)<<endl;

	system("pause");
	return 0;
}

测试结果:

分配方式耗时
频繁调用new117s
一次new足够内存3s
用vector9s

结论:

1. 用一次new足够内存的方式其实也就相当于使用内存池,三种方式耗时排序为:内存池 < vector < 频繁new。

2. 要实例化的类的大小对效率的影响并不大。CTest类的声明中,是否注释掉前3个成员变量并不影响对时间的消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值