动态
内存管理是指我们程序可以在程序运行时候进行内存占用和内存释放操作。动态内存的分配是通过操作系统来完成的,分配的是系统内存资源中称作栈的那一部分内存。若想动态的获得内存资源,我们的程序则必须调用系统的功能。如果我们不再使用申请内存资源,就应该释放该内存资源。在程序中频繁的使用和释放内存时,由于使用了操作系统的功能的原因,程序执行的速度就会降低。为了提高效率,我们应该考虑,将程序中的部分或者全部空闲内存保存在程序中,以便以后使用。
//FreeListBase.h
class FreeListBase
{
public:
void operator delete(void *);
void *operator new(size_t sz);
FreeListBase();
virtual ~FreeListBase();
private:
FreeListBase* next;
static FreeListBase* freelist;
};
//FreeListBase.cpp
#include "FreeListBase.h"
#include<iostream>
using namespace std;
FreeListBase*FreeListBase::freelist=NULL;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
FreeListBase::FreeListBase()
{
}
FreeListBase::~FreeListBase()
{
}
void* FreeListBase::operator new(size_t sz)
{
if(freelist){
FreeListBase*p=freelist;
freelist=freelist->next;
return p;
}
//cout<<sz<<endl;
return malloc(sz);
}
void FreeListBase::operator delete(void *vp)
{
FreeListBase*p=(FreeListBase*)vp;
p->next=freelist;
freelist=p;
}
//
#include "FreeListBase.h"
class TemperatureUsingFreeList : public FreeListBase
{
public:
int average();
int currentTemp;
int minTemp;
int maxTemp;
int ID;
TemperatureUsingFreeList();
virtual ~TemperatureUsingFreeList();
};
可利用空间表的功能是设置在基类中。但是在实际的程序设计中使用了可利用空间技术的时候,最好把该功能直接引入到使用该功能的的功能类中。这一点非常重要。因为类FreeListBase包含了一个指向可用内存块的静态指针,此时静态指针要用在所有从类FreeListBase 派生的类中。如果我们使用了从类的FreeListBase派生的类,在一定程度上,可利用空间表就包含了不同大小的内存空间。而运算符new只是返回了第一个可以利用的内存块