C++ 内存管理-使用可利用空间表进行内存管理

动态内存管理是指我们程序可以在程序运行时候进行内存占用和内存释放操作。动态内存的分配是通过操作系统来完成的,分配的是系统内存资源中称作栈的那一部分内存。若想动态的获得内存资源,我们的程序则必须调用系统的功能。如果我们不再使用申请内存资源,就应该释放该内存资源。在程序中频繁的使用和释放内存时,由于使用了操作系统的功能的原因,程序执行的速度就会降低。为了提高效率,我们应该考虑,将程序中的部分或者全部空闲内存保存在程序中,以便以后使用。
//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只是返回了第一个可以利用的内存块
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值