【C++项目】手动实现一个定长内存池(了解内存分配机制、定长内存提高效率 附源码)

0000

项目源代码:高并发内存池

1.项目介绍

在这里插入图片描述
这是一个 C++ 中的对象池(Object Pool)的简单实现,用于更有效地管理对象的内存分配和回收。对象池是一种内存管理技术,旨在减少频繁分配和释放对象的开销,从而提高程序的性能。

  • 以下是该对象池的一些关键部分和功能:

New() 函数:用于获取一个新的对象。它首先检查是否有已归还的内存块,如果有,则使用归还的内存,否则从内存池中分配一个新的对象。它使用 malloc 来分配内存,然后使用定位 new 来调用对象的构造函数,初始化对象。

Delete() 函数:用于回收一个对象。它首先调用对象的析构函数以清理对象,然后将对象添加到内存池的归还链表中。为了解决不同对象类型的大小差异问题,它使用了一个二级指针 _freeList,这样不同类型的对象都可以通过 _freeList 连接在一起。

内存分配:初始时,对象池会通过 malloc 分配一块大内存块,大小为1024 * 128字节。然后,通过不断更新 _memory 指针和 _remainBytes 记录内存块的剩余空间,来实现对象的内存分配。

性能测试:在代码中,有一个测试函数 TestObjectPool,用于测试直接使用 new 和对象池分配的性能差异。它执行多轮的分配和释放操作,以测量两种方法的性能。

这个对象池的实现是为了演示目的而创建的,可以在需要管理大量相同类型对象的情况下提高性能

2.代码部分

  • ObjectPool.h
#pragma once
#include<vector>
#include<iostream>
#include<time.h>
template <class T>
class ObjectPool
{
   
public:
	T* New()
	{
   
		T* obj = nullptr; //给一个对象指针 指向内存
		if (_freeList) //如果有归还的内存先用归还内存
		{
   
			//next指向freelist+sizeof(T)的一个位置
			void* next = static_cast<void*>(static_cast<char*>(_freeList) + sizeof(T));
			//void* next = *((void**)_freeList);
			obj = (T*)_freeList;
			_freeList = next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值