C++中自定义简单内存配置器

目录

写在前面

参考程序

第一版本

第二版本

第三版本

参考文献


写在前面

通过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-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值