⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_alloc.cpp

📁 使用c语言实现的内存池,并且进行了封装,与stl配合使用,测试效率
💻 CPP
字号:
///
///
#ifdef _DEBUG
//#include "vld.h"
#endif
#include "kl_cmempool.h"
#include "kl_allocator.h"
#include <vector>
#include <list>
#include <iostream>
#include <cstdlib>
#include "timer.h"

struct Node
{
	char _s[100];

	Node() 
	{
		_s[0] = 0;
	}
};

typedef std::vector<int> DefaultVector;
typedef std::vector<int, kl_common::allocator<int> > MPVector;

typedef std::list<int> DefaultList;
typedef std::list<int, kl_common::allocator<int> > MPList;

typedef std::list<Node> DefaultNodeList;
typedef std::list<Node, kl_common::allocator<Node> > MPNodeList;

template <typename _Tp, typename _Value>
void construct( _Tp &con, const _Value &val, const int size )
{
	for( int i = 0; i < size; ++ i )
	{
		con.push_back( val );
	}
}

int main()
{
	timer t;
	std::cout.precision( 10 );
	
	/*
		pure c memory pool testing. large memory allcation.
	*/
	cmMemoryPool mp;
	mp = cmCreate( 128, 2048 ); 

	const int psize = 1000;
	t.elapsed();
	for( int i = 0; i < psize; ++ i )
	{
		void *p = malloc( 1024 );
		free( p );
	}
	std::cout << "malloc/free 1024 bytes for " << psize << " times, used time : " << t.elapsed() << std::endl;
	
	t.elapsed();
	for( int i = 0; i < psize; ++ i )
	{
		void *p = cmAllocate( &mp, 1024 );
		cmDeallocate( &mp, p, 1024 );
	}
	std::cout << "cmAllocate/cmDeallocate 1024 bytes for " << psize << " times, used time : " << t.elapsed() << std::endl;

	cmRelease( &mp );
	/*
		stl allocator testing.
	*/
	t.elapsed();
	DefaultVector def_con;
	construct( def_con, 1, 200 );
	std::cout << "Construction vector[200int] [default allocator] : " << t.elapsed() << std::endl;	

	t.elapsed();
	MPVector mp_con;
	construct( mp_con, 1, 200 );
	std::cout << "Construction vector[200int] [memory pool allocator] : " << t.elapsed() << std::endl;

	t.elapsed();
	DefaultList def_list;
	construct( def_list, 1, 50000 );
	std::cout << "Construction list[50000int] [default allocator] : " << t.elapsed() << std::endl;	

	t.elapsed();
	MPList mp_list;
	construct( mp_list, 1, 50000 );
	std::cout << "Construction list[50000int] [memory pool allocator] : " << t.elapsed() << std::endl;

	t.elapsed();
	DefaultNodeList def_node_list;
	construct( def_node_list, Node(), 50000 );
	std::cout << "Construction list[50000Node] [default allocator] : " << t.elapsed() << std::endl;	

	t.elapsed();
	MPNodeList mp_node_list;
	construct( mp_node_list, Node(), 50000 );
	std::cout << "Construction list[50000Node] [memory pool allocator] : " << t.elapsed() << std::endl;

#ifndef _DEBUG
	system( "pause" ); 
#endif

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -