📄 mpool_loc.h
字号:
/* * Memory pool local defines. * * Copyright 1996 by Gray Watson. * * This file is part of the mpool package. * * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies, and that the name of Gray Watson not be used in advertising * or publicity pertaining to distribution of the document or software * without specific, written prior permission. * * Gray Watson makes no representations about the suitability of the * software described herein for any purpose. It is provided "as is" * without express or implied warranty. * * The author may be reached via http://256.com/gray/ * * $Id: mpool_loc.h,v 1.2 2005/05/20 20:08:54 gray Exp $ */#ifndef __MPOOL_LOC_H__#define __MPOOL_LOC_H__#define MPOOL_MAGIC 0xABACABA /* magic for struct */#define BLOCK_MAGIC 0xB1B1007 /* magic for blocks */#define FENCE_MAGIC0 (unsigned char)(0xFAU) /* 1st magic mem byte */#define FENCE_MAGIC1 (unsigned char)(0xD3U) /* 2nd magic mem byte */#define FENCE_SIZE 2 /* fence space */#define MIN_ALLOCATION (sizeof(mpool_free_t)) /* min alloc */#define MAX_FREE_SEARCH 10240 /* max size to search */#define MAX_FREE_LIST_SEARCH 100 /* max looking for free mem */ /* * bitflag tools for Variable and a Flag */#define BIT_FLAG(x) (1 << (x))#define BIT_SET(v,f) (v) |= (f)#define BIT_CLEAR(v,f) (v) &= ~(f)#define BIT_IS_SET(v,f) ((v) & (f))#define BIT_TOGGLE(v,f) (v) ^= (f)#define SET_POINTER(pnt, val) \ do { \ if ((pnt) != NULL) { \ (*(pnt)) = (val); \ } \ } while(0)#define BLOCK_FLAG_USED BIT_FLAG(0) /* block is used */#define BLOCK_FLAG_FREE BIT_FLAG(1) /* block is free */#define DEFAULT_PAGE_MULT 16 /* pagesize = this * getpagesize*//* How many pages SIZE bytes resides in. We add in the block header. */#define PAGES_IN_SIZE(mp_p, size) (((size) + sizeof(mpool_block_t) + \ (mp_p)->mp_page_size - 1) / \ (mp_p)->mp_page_size)#define SIZE_OF_PAGES(mp_p, page_n) ((page_n) * (mp_p)->mp_page_size)#define MAX_BITS 30 /* we only can allocate 1gb chunks */#define MAX_BLOCK_USER_MEMORY(mp_p) ((mp_p)->mp_page_size - \ sizeof(mpool_block_t))#define FIRST_ADDR_IN_BLOCK(block_p) (void *)((char *)(block_p) + \ sizeof(mpool_block_t))#define MEMORY_IN_BLOCK(block_p) ((char *)(block_p)->mb_bounds_p - \ ((char *)(block_p) + \ sizeof(mpool_block_t)))typedef struct { unsigned int mp_magic; /* magic number for struct */ unsigned int mp_flags; /* flags for the struct */ unsigned long mp_alloc_c; /* number of allocations */ unsigned long mp_user_alloc; /* user bytes allocated */ unsigned long mp_max_alloc; /* maximum user bytes allocated */ unsigned int mp_page_c; /* number of pages allocated */ unsigned int mp_max_pages; /* maximum number of pages to use */ unsigned int mp_page_size; /* page-size of our system */ int mp_fd; /* fd for /dev/zero if mmap-ing */ off_t mp_top; /* top of our allocations in fd */ mpool_log_func_t mp_log_func; /* log callback function */ void *mp_addr; /* current address for mmaping */ void *mp_min_p; /* min address in pool for checks */ void *mp_bounds_p; /* max address in pool for checks */ struct mpool_block_st *mp_first_p; /* first memory block we are using */ struct mpool_block_st *mp_last_p; /* last memory block we are using */ struct mpool_block_st *mp_free[MAX_BITS + 1]; /* free lists based on size */ unsigned int mp_magic2; /* upper magic for overwrite sanity */} mpool_t;/* for debuggers to be able to interrogate the generic type in the .h file */typedef mpool_t mpool_ext_t;/* * Block header structure. This structure *MUST* be long-word * aligned. */typedef struct mpool_block_st { unsigned int mb_magic; /* magic number for block header */ void *mb_bounds_p; /* block boundary location */ struct mpool_block_st *mb_next_p; /* linked list next pointer */ unsigned int mb_magic2; /* upper magic for overwrite sanity */} mpool_block_t;/* * Free list structure. */typedef struct { void *mf_next_p; /* pointer to the next free address */ unsigned long mf_size; /* size of the free block */} mpool_free_t;#endif /* ! __MPOOL_LOC_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -