C++ 自定义内存 管理

工作中常常需要,将一些数据放到内存中处理,有时候数据量好大多达3G的空间。

而且自己存储都是一些指针之类的东西,每次都要new,容器中存储的量好大,四五百万个。

而且最头疼的就是 析构的时候要等好久才能释放掉这个东西。查了好久 发现最流行的就是 空间换时间。

说了也惭愧,在学校中没怎么学到高深的东西,好多都是自己在工作中学习的。

同事说我可以看看Nginx的内存管理,我百度了下,有点那么意思就开始着手,写一个自己的内存管理。

代码如下:

class JHeapManagement
	{
	public:
		JHeapManagement(){
			_AddBuffer();
		}
		~JHeapManagement()
		{
			for(size_t i=0;i<currentheap;i++)
			{
				delete[] heaps[i];
			}
			heaps.clear();
		}
		void* AllocBytes(size_t size)
		{
			size_t allocsize = size;
			if( (currentallocsize+allocsize)>HEAPBUFFERSIZE)
			{
				_AddBuffer();
			}
			char* buffer = heaps[currentheap];
			char* retpos = buffer + currentallocsize;
			currentallocsize += allocsize;
			return (void*)retpos;
		}
		template<class T>
		void* Alloc(size_t num = 1)
		{
			size_t allocsize = num*sizeof(T);
			if( (currentallocsize+allocsize)>HEAPBUFFERSIZE)
			{
				_AddBuffer();
			}
			char* buffer = heaps[currentheap];
			char* retpos = buffer + currentallocsize;
			currentallocsize += allocsize;
			return (void*)retpos;
		}
	private:
		void _AddBuffer()
		{
			currentheap = heaps.size();
			char* buffer = new char[HEAPBUFFERSIZE];
			memset(buffer,0,HEAPBUFFERSIZE);
			heaps.push_back(buffer);
			currentallocsize = 0;
		}
	private:
		vector<char*> heaps;
		size_t currentheap;
		size_t currentallocsize;
	};
#define HEAPBUFFERSIZE 33554432 //32M 

我定义的 每个块的大小是32M,伙伴们也可以随意设定。

用法:

JHeapManagement heap;
	vector<path*> con;
	for(int i=0;i<1000000;i++){
	path* p = heap.Alloc<path>(/*参数默认为1 ,表示申请1个 T类型数据的大小*/);
	con.push_back(p);
	}
如果平时需要在内存中存放大量数据,自己写个内存管理还是有点用的。如果代码有什么不对的地方希望大家指点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值