📄 mempool.h
字号:
/* * Copyright (c) 1999-2006 Christophe Fillot. * E-mail: cf@utc.fr * * mempool.h: Simple Memory Pools. */#ifndef __MEMPOOL_H__#define __MEMPOOL_H__ 1#include <sys/types.h>#include <sys/time.h>#include <pthread.h>#include "utils.h"/* Memory Pool "Fixed" Flag */#define MEMPOOL_FIXED 1/* Dummy value used to check if a memory block is invalid */#define MEMBLOCK_TAG 0xdeadbeeftypedef struct memblock memblock_t;typedef struct mempool mempool_t;/* Memory block */struct memblock { int tag; /* MEMBLOCK_TAG if block is valid */ size_t block_size; /* Block size (without header) */ memblock_t *next,*prev; /* Double linked list pointers */ mempool_t *pool; /* Pool which contains this block */ m_uint64_t data[0]; /* Memory block itself */};/* Memory Pool */struct mempool { memblock_t *block_list; /* Double-linked block list */ pthread_mutex_t lock; /* Mutex for managing pool */ char *name; /* Name of this pool */ int flags; /* Flags */ int nr_blocks; /* Number of blocks in this pool */ size_t total_size; /* Total bytes allocated */ size_t max_size; /* Maximum memory */};/* Lock and unlock access to a memory pool */#define MEMPOOL_LOCK(mp) pthread_mutex_lock(&(mp)->lock)#define MEMPOOL_UNLOCK(mp) pthread_mutex_unlock(&(mp)->lock)/* Callback function for use with mp_foreach */typedef void (*mp_foreach_cbk)(memblock_t *block,void *user_arg);/* Execute an action for each block in specified pool */static inline void mp_foreach(mempool_t *pool,mp_foreach_cbk cbk,void *arg){ memblock_t *mb; for(mb=pool->block_list;mb;mb=mb->next) cbk(mb,arg);}/* Allocate a new block in specified pool */void *mp_alloc(mempool_t *pool,size_t size);/* Allocate a new block which will not be zeroed */void *mp_alloc_n0(mempool_t *pool,size_t size);/* Reallocate a block */void *mp_realloc(void *addr,size_t new_size);/* Allocate a new memory block and copy data into it */void *mp_dup(mempool_t *pool,void *data,size_t size);/* Duplicate specified string and insert it in a memory pool */char *mp_strdup(mempool_t *pool,char *str);/* Free block at specified address */int mp_free(void *addr);/* Free block at specified address and clean pointer */int mp_free_ptr(void *addr);/* Free all blocks of specified pool */void mp_free_all_blocks(mempool_t *pool);/* Free specified memory pool */void mp_free_pool(mempool_t *pool);/* Create a new pool in a fixed memory area */mempool_t *mp_create_fixed_pool(mempool_t *mp,char *name);/* Create a new pool */mempool_t *mp_create_pool(char *name);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -