目录
写在前面
通过C++中内存分配的几种方式我们知道,如果我们要使用自己定义的内存配置器,需要我们重载operator new、operator delete、operator new[]、operator delete[]四个函数,但是前面的我们通过模拟内部实现来进行的,这里我们将重新定义其内存配置方式,程序均参考于书籍与视频,在博客后面均说明
参考程序
第一版本
我们在重载的四个函数中不使用malloc,free进行模拟,而是使用内存链表的形式,将空闲的内存做成链表,每次开辟新内存的话,就将链表中的一个分配出去,如果回收的话,析构对象,将内存重新放置回链表中
#ifndef _SCREEN_H_
#define _SCREEN_H_
#include <cstddef>
#include <iostream>
using namespace std;
class Screen
{
public:
Screen(int x):i(x){
};
int get(){
return i;
}
void* operator new(size_t);
void operator delete(void*,size_t);
private:
Screen *next;
static Screen *freeStore;
static const int screenChunk;
private:
int i; //类中的数据
};
Screen* Screen::freeStore = 0; //指向后面的一个
const int Screen::screenChunk = 24; //放置24个大小
void *Screen::operator new(size_t size)
{
Screen *p;
if(!freeStore)
{
size_t chunk = screenChunk * size;
freeStore = p = reinterpret<Screen*>(new char[chunk]);
//将一大块分割片片,当做linked list串接起来
for(;p != &freeStore[screenChunk-1];++p)
p-