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

📄 heap.cpp

📁 可能是能找到的处理速度最快
💻 CPP
字号:
//: HEAP.CPP		--- a memory manager
#include<malloc.h>
#include<stdlib.h>
#include"heap.h"

	CHeap::CHeapUnit CHeap::heap[CHeap::MAX_HEAP]={CHeap::CHeapUnit()};
	unsigned CHeap::HeapCount=0;
	unsigned CHeap::HaveSpace=0;
	bool CHeap::MemUseUp=false;
#ifndef LOCALHEAP
	CHeap GlobalHeap;
#endif
CHeap::CHeap(size_t t)
{
	HaveSpace=0;
	HeapCount=0;
	MemUseUp=false;
	TempStartUnit=0;
	TempStartLocation=NULL;
	TempLocationSetted=false;
	unsigned s=((t-1)/HEAP_UNIT+1);
	s=(s>MAX_HEAP)?MAX_HEAP:s;
	for(unsigned i=0;i<s;i++)
	{
		if (heap[i].GetMem(HEAP_UNIT))
			HeapCount++;
		else
		{
			MemUseUp=true;
			return;
		}
	}
}

CHeap::~CHeap(void)
{
	for(unsigned i=0;i<HeapCount;i++)
		heap[i].FreeMem();
}

void *CHeap::operator new(size_t s)
{
	if (s<=HEAP_UNIT)
	{
		char *p;
		for(unsigned i=HaveSpace;i<HeapCount;i++)
		{
			p=heap[i].alloc(s);
			if (p)
			{
				if ((i==HaveSpace)&&(heap[i].Remain()<=MIN_SPACE))
					HaveSpace++;
				return p;
			}
		}
		bool b=heap[i].GetMem(HEAP_UNIT);
		if (b)
		{
			HeapCount++;
			p=heap[i].alloc(s);
			if ((i==HaveSpace)&&(heap[i].Remain()<=MIN_SPACE))
				HaveSpace++;
			return p;
		}
	}
	MemUseUp=true;
	return malloc(s);
}

void CHeap::operator delete(void *space)
{
	if (!MemUseUp)
		return ;
	for(unsigned i=0;i<HeapCount;i++)
	{
		if (heap[i].IsHere(space))
			return;
	}
	free(space);	// if the space is get by malloc function 
}

void CHeap::HeapReset()
{
	FreeAll();
	if (heap[0].GetMem(HEAP_UNIT))
		HeapCount++;
	else
	{
		MemUseUp=true;
		return;
	}
}

void CHeap::FreeAll()
{
	if (MemUseUp)
		return;
	for(unsigned i=0;i<HeapCount;i++)
		heap[i].FreeMem();
	HeapCount=0;
	HaveSpace=0;
	MemUseUp=false;
}

⌨️ 快捷键说明

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