一个简单的变长内存池

本文深入探讨了变长内存池的概念,通过实例解释其工作原理,并展示了如何设计和实现一个简单的变长内存池,以提高内存分配效率和程序性能。内容包括内存池的基本思想、变长内存池的需求背景以及具体的实现细节。
#define NODE_SIZE  (200)                    //每个node的大小
#define BASE_NODE_NUM (1024 * 1)  //初始分配大小
#define STEP_NODE_NUM (1024 * 1)   //每次递增大小

#include <string.h>

#pragma pack(1)

typedef struct _mem_node 
{ 
    unsigned int num;   //每次分配的内存区域的个数
	union
	{
		struct _mem_node *next; 
		char buf[NODE_SIZE];   //每个node的大小
	};

	_mem_node()
	{
		num = 0;
		memset(buf,0,sizeof(buf));
	};

}mem_node_t, *pmem_node_t; 

#pragma pack()

/* block信息*/ 
typedef struct _mem_block 
{ 
	mem_node_t *node_head; 
	mem_node_t *node_tail; 
	unsigned int node_num;       // block中node个数
	struct _mem_block *next;     //用于将每个block连接起来
}mem_block_t, *pmem_block_t; 

/*pool信息*/ 
typedef struct _mem_pool 
{ 
	mem_block_t* block_head;    //第一个block
	mem_block_t* block_tail;    //最后一个block
	mem_node_t*  free_head;      //空闲节点
	unsigned int block_num;     //block个数
	unsigned int free_num;      //空闲节点个数 
	unsigned int base_num;     //初始内存节点个数
	unsigned int step_num;     //每次内存增长节点个数
}mem_pool_t, *pmem_pool_t;


int InitMemPool(int base, int step); //初始化内存池
void DestroyMemPool(void);           //销毁内存池

void* AllocMem(unsigned int size);  //分配内存
void FreeMem(void* ptr);            //销毁内存


#include "MemoryTest.h"
#include "stdio.h"
#include <string.h> 
#include <stdlib.h> 
#include <math.h>

#define MEM_POOL_DEBUG 

/*add new memory block to our memory pool*/ 
static int AddMemBlock(int num); 
/* init the new block */ 
static int InitMemBlock(int num, mem_block
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值