1
/*****************************************************************************
3
Copyright (C) 1994, 2009, Innobase Oy. All Rights Reserved.
5
This program is free software; you can redistribute it and/or modify it under
6
the terms of the GNU General Public License as published by the Free Software
7
Foundation; version 2 of the License.
9
This program is distributed in the hope that it will be useful, but WITHOUT
10
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
You should have received a copy of the GNU General Public License along with
14
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15
St, Fifth Floor, Boston, MA 02110-1301 USA
17
*****************************************************************************/
19
/**************************************************//**
20
@file include/mem0pool.h
21
The lowest-level memory management
23
Created 6/9/1994 Heikki Tuuri
24
*******************************************************/
33
/** Memory area header */
34
typedef struct mem_area_struct mem_area_t;
36
typedef struct mem_pool_struct mem_pool_t;
38
/** The common memory pool */
39
extern mem_pool_t* mem_comm_pool;
41
/** Memory area header */
43
struct mem_area_struct{
44
ulint size_and_free; /*!< memory area size is obtained by
45
anding with ~MEM_AREA_FREE; area in
46
a free list if ANDing with
47
MEM_AREA_FREE results in nonzero */
48
UT_LIST_NODE_T(mem_area_t)
49
free_list; /*!< free list node */
52
/** Each memory area takes this many extra bytes for control information */
53
#define MEM_AREA_EXTRA_SIZE (ut_calc_align(sizeof(struct mem_area_struct),\
56
/********************************************************************//**
57
Creates a memory pool.
58
@return memory pool */
63
ulint size); /*!< in: pool size in bytes */
64
/********************************************************************//**
65
Frees a memory pool. */
70
mem_pool_t* pool); /*!< in, own: memory pool */
71
/********************************************************************//**
72
Allocates memory from a pool. NOTE: This low-level function should only be
74
@return own: allocated memory buffer */
79
ulint* psize, /*!< in: requested size in bytes; for optimum
80
space usage, the size should be a power of 2
81
minus MEM_AREA_EXTRA_SIZE;
82
out: allocated size in bytes (greater than
83
or equal to the requested size) */
84
mem_pool_t* pool); /*!< in: memory pool */
85
/********************************************************************//**
86
Frees memory to a pool. */
91
void* ptr, /*!< in, own: pointer to allocated memory
93
mem_pool_t* pool); /*!< in: memory pool */
94
/********************************************************************//**
95
Returns the amount of reserved memory.
96
@return reserved mmeory in bytes */
99
mem_pool_get_reserved(
100
/*==================*/
101
mem_pool_t* pool); /*!< in: memory pool */
102
/********************************************************************//**
103
Validates a memory pool.
104
@return TRUE if ok */
109
mem_pool_t* pool); /*!< in: memory pool */
110
/********************************************************************//**
111
Prints info of a memory pool. */
116
FILE* outfile,/*!< in: output file to write to */
117
mem_pool_t* pool); /*!< in: memory pool */
121
#include "mem0pool.ic"