Posted on 2012-07-20 10:42
点点滴滴 阅读(975)
评论(0) 编辑 收藏 引用 所属分类:
02 编程语言
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <time.h>
#include <boost/pool/pool_alloc.hpp>
template<typename T>
class alloc
{
public:
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef T* pointer;
typedef const T* const_pointer;
typedef T& reference;
typedef const T& const_reference;
typedef T value_type;
public:
alloc(){}
template<typename T>
alloc(const alloc<T>& ){
}
alloc& operator=(const alloc& rhs){
return *this;
}
static pointer allocate(size_type n)
{
return (pointer)malloc(n*sizeof(T));
}
static void deallocate(pointer ptr, size_type n)
{
free((pointer)ptr);
}
size_type max_size() const throw()
{
return size_t(-1) / sizeof(T);
}
template <typename U>
struct rebind
{
typedef alloc<U> other;
};
};
int _tmain(int argc, _TCHAR* argv[])
{
int start4 = GetTickCount();
std::vector<int, alloc<int>> RR4;
for (int i = 0; i < 10000000; i++)
{
RR4.push_back(i);
}
int time4 = GetTickCount()- start4;
std::cout<<"alloc: "<<time4<<std::endl;
int start3 = GetTickCount();
std::vector<int, boost::fast_pool_allocator<int>> RR3;
for (int i = 0; i < 10000000; i++)
{
RR3.push_back(i);
}
int time3 = GetTickCount()- start3;
std::cout<<"boost::fast_pool_allocator: "<<time3<<std::endl;
int start1 = GetTickCount();
std::vector<int,std::allocator<int>> RR1;
for (int i = 0; i < 10000000; i++)
{
RR1.push_back(i);
}
int time1 = GetTickCount()- start1;
std::cout<<"std::allocator: "<<time1<<std::endl;
int start2 = GetTickCount();
std::vector<int, boost::pool_allocator<int>> RR2;
for (int i = 0; i < 10000000; i++)
{
RR2.push_back(i);
}
int time2 = GetTickCount()- start2;
std::cout<<"boost::pool_allocator: "<<time2<<std::endl;
return 0;
}
debug (VC2008):
- alloc: 11438
- boost::fast_pool_allocator: 19437
- std::allocator: 11562
- boost::pool_allocator: 27703
- 请按任意键继续. . .
Release(VC2008):
- alloc: 375
- boost::fast_pool_allocator: 1032
- std::allocator: 343
- boost::pool_allocator: 1266
- 请按任意键继续. .