C++いくつかのメモリ割り当て方法の効率テストと比較

1389 ワード

ここ数日やっているプロジェクトは頻繁にnewの多くのオブジェクトを必要とし、頻繁にnewを呼び出すことが効率に与える影響は理論的にとどまり、直観的な認識がないので、小さなテストをしました.今回のテストでは、メモリの割り当て方法を3つだけ比較しました.
1.頻繁にnewを呼び出す
2.一度にnewで十分なメモリを使用し、placement newで割り当てられたメモリにオブジェクトを生成する
3.vectorで
テストコードは次のとおりです.
#include 
#include 
#include 
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 testVec(MAX_CYCLE);
}

int main()
{
	time_t timer1, timer2;

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

テスト結果:
わりあてほうしき
時間がかかる
頻繁にnewを呼び出す
117s
一度のnewで十分なメモリ
3s
vectorで
9s
結論:
1.一度にnewで十分なメモリを使用する方法は、メモリプールを使用することに相当します.3つの方法では、メモリプール2.インスタンス化するクラスのサイズが効率に与える影響は大きくありません.CTestクラスの宣言では、前の3つのメンバー変数を注釈するかどうかは時間の消費に影響しません.