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., 59 Temple
15
Place, Suite 330, Boston, MA 02111-1307 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
Allocates memory from a pool. NOTE: This low-level function should only be
67
@return own: allocated memory buffer */
72
ulint* psize, /*!< in: requested size in bytes; for optimum
73
space usage, the size should be a power of 2
74
minus MEM_AREA_EXTRA_SIZE;
75
out: allocated size in bytes (greater than
76
or equal to the requested size) */
77
mem_pool_t* pool); /*!< in: memory pool */
78
/********************************************************************//**
79
Frees memory to a pool. */
84
void* ptr, /*!< in, own: pointer to allocated memory
86
mem_pool_t* pool); /*!< in: memory pool */
87
/********************************************************************//**
88
Returns the amount of reserved memory.
89
@return reserved mmeory in bytes */
92
mem_pool_get_reserved(
93
/*==================*/
94
mem_pool_t* pool); /*!< in: memory pool */
95
/********************************************************************//**
96
Reserves the mem pool mutex. */
99
mem_pool_mutex_enter(void);
100
/*======================*/
101
/********************************************************************//**
102
Releases the mem pool mutex. */
105
mem_pool_mutex_exit(void);
106
/*=====================*/
107
/********************************************************************//**
108
Validates a memory pool.
109
@return TRUE if ok */
114
mem_pool_t* pool); /*!< in: memory pool */
115
/********************************************************************//**
116
Prints info of a memory pool. */
121
FILE* outfile,/*!< in: output file to write to */
122
mem_pool_t* pool); /*!< in: memory pool */
126
#include "mem0pool.ic"