#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

本文深入探讨了变长内存池的概念,通过实例解释其工作原理,并展示了如何设计和实现一个简单的变长内存池,以提高内存分配效率和程序性能。内容包括内存池的基本思想、变长内存池的需求背景以及具体的实现细节。

972

被折叠的 条评论
为什么被折叠?



