libfastcommon/src/fast_mpool.h

99 lines
2.0 KiB
C

/**
* Copyright (C) 2008 Happy Fish / YuQing
*
* FastDFS may be copied only under the terms of the GNU General
* Public License V3, which may be found in the FastDFS source kit.
* Please visit the FastDFS Home Page http://www.csource.org/ for more detail.
**/
//fast_mpool.h
#ifndef _FAST_MPOOL_H
#define _FAST_MPOOL_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include "common_define.h"
/* malloc chain */
struct fast_mpool_malloc
{
int alloc_size;
char *base_ptr;
char *end_ptr;
char *free_ptr;
struct fast_mpool_malloc *malloc_next;
struct fast_mpool_malloc *free_next;
};
struct fast_mpool_man
{
struct fast_mpool_malloc *malloc_chain_head; //malloc chain to be freed
struct fast_mpool_malloc *free_chain_head; //free node chain
int alloc_size_once; //alloc size once, default: 1MB
int discard_size; //discard size, default: 64 bytes
};
struct fast_mpool_stats
{
int64_t total_bytes;
int64_t free_bytes;
int total_trunk_count;
int free_trunk_count;
};
#ifdef __cplusplus
extern "C" {
#endif
/**
mpool init
parameters:
mpool: the mpool pointer
alloc_size_once: malloc elements once, 0 for malloc 1MB memory once
discard_size: discard when remain size <= discard_size, 0 for 8 bytes
return error no, 0 for success, != 0 fail
*/
int fast_mpool_init(struct fast_mpool_man *mpool,
const int alloc_size_once, const int discard_size);
/**
mpool destroy
parameters:
mpool: the mpool pointer
*/
void fast_mpool_destroy(struct fast_mpool_man *mpool);
/**
reset for recycle use
parameters:
mpool: the mpool pointer
*/
void fast_mpool_reset(struct fast_mpool_man *mpool);
/**
alloc a node from the mpool
parameters:
mpool: the mpool pointer
size: alloc bytes
return the alloced ptr, return NULL if fail
*/
void *fast_mpool_alloc(struct fast_mpool_man *mpool, const int size);
/**
get stats
parameters:
mpool: the mpool pointer
stats: return the stats
*/
void fast_mpool_stats(struct fast_mpool_man *mpool, struct fast_mpool_stats *stats);
#ifdef __cplusplus
}
#endif
#endif