简单的自定义内存分配器

#include <new>
#include <cstddef>
#include <cstdlib>
#include <climits>
#include <vector>
#include <iostream>


using namespace std;

namespace liuqi {
template<class T>
inline T* _allocate(ptrdiff_t size, T*) {
	set_new_handler(0);
	T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
	if(tmp == 0) {
		cerr << "out of memory" << endl;
		exit(1);
	}
	return tmp;
}

template<class T>
inline void _deallocate(T* buffer) {
	::operator delete(buffer);
}

template<class T1, class T2>
inline void _construct(T1* p, const T2& value) {
	new(p) T1(value);
}


template<class T>
inline void _destory(T* ptr) {
	ptr->~T();
}

template<class T>
class allocator {
public:
	typedef T value_type;
	typedef T* pointer;
	typedef const T* const_pointer;
	typedef T& reference;
	typedef const T& const_reference;
	typedef size_t size_type;
	typedef ptrdiff_t difference_type;

//rebind allocator of type U 
template<class U>
struct bind {
	typedef allocator<U> other;	
};


//hint used for locality. ref[Austern],p189
pointer allocate(size_type n, const void* hint=0) {
	return _allocate((difference_type)n, (pointer)0); 
}

void deallocate(pointer p, size_t n) {
	_deallocate(p);
}

void construct(pointer p, const T& value) {
	_construct(p, value);
}

void destory(pointer p) {
	_destory(p);
}

pointer address(reference x) {
	return (pointer)&x;
}

const_pointer const_address(reference x) {
	return (const_pointer)&x;
}

size_type max_size() const {
	return size_type(UINT_MAX/sizeof(T));
}


};

};



int main() {
	int ia[5] = {0, 1, 2, 3, 4};
	unsigned int i;
	vector<int, liuqi::allocator<int> > iv(ia, ia+5);
	for(i=0; i<iv.size(); i++) {
		cout << iv[i] << ' ';
	}
	cout << endl;
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值