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.,
15 51 Franklin 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"