- Main Page
- Related Pages
- Modules
- Data Structures
- Files
- Examples

Data Structures | Typedefs | Functions | Variables
Memory Pool
Tools

These functions provide memory pool management. More...

## Data Structures
struct | _Eina_Mempool_Backend
struct | _Eina_Mempool_Backend_ABI1
struct | _Eina_Mempool_Backend_ABI2
struct | _Eina_Mempool

## Typedefs
typedef struct _Eina_Mempool_Backend_ABI1 | Eina_Mempool_Backend_ABI1
typedef struct _Eina_Mempool_Backend_ABI2 | Eina_Mempool_Backend_ABI2
typedef struct _Eina_Mempool | Eina_Mempool
| Mempool type.
typedef struct _Eina_Mempool_Backend | Eina_Mempool_Backend
| Mempool backend type.
typedef void(* | Eina_Mempool_Repack_Cb )(void *dst, void *src, void *data)
| Type for a callback who need to unreference an old object from a mempool and reference the new one instead. More...

## Functions
static void * | eina_mempool_realloc (Eina_Mempool *mp, void *element, unsigned int size)
| Re-allocate an amount memory by the given mempool. More...
static void * | eina_mempool_malloc (Eina_Mempool *mp, unsigned int size)
| Allocate memory using the given mempool. More...
static void * | eina_mempool_calloc (Eina_Mempool *mp, unsigned int size)
| Allocate and zero memory using the given mempool. More...
static void | eina_mempool_free (Eina_Mempool *mp, void *element)
| Free resources previously allocated by the given mempool. More...
static unsigned int | eina_mempool_alignof (unsigned int size)
Eina_Mempool * | eina_mempool_add (const char *module, const char *context, const char *options,...)
void | eina_mempool_del (Eina_Mempool *mp)
void | eina_mempool_repack (Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data)
void | eina_mempool_gc (Eina_Mempool *mp)
void | eina_mempool_statistics (Eina_Mempool *mp)
Eina_Bool | eina_mempool_register (Eina_Mempool_Backend *be)
void | eina_mempool_unregister (Eina_Mempool_Backend *be)

## Variables
Eina_Error | EINA_ERROR_NOT_MEMPOOL_MODULE

## Detailed Description

These functions provide memory pool management.

Several mempool are available:

- `chained_pool:` It is the default one. It allocates a big chunk of memory with malloc() and split the result in chunks of the requested size that are pushed inside a stack. When requested, it takes this pointer from the stack to give them to whoever wants them.
- `pass_through:` it just call malloc() and free(). It may be faster on some computers than using our own allocators (like having a huge L2 cache, over 4MB).
- `one_big:` It call just one time malloc for the requested number of items. Useful when you know in advance how many object of some type will live during the life of the mempool.

## Typedef Documentation

Eina_Mempool_Repack_Cb

Type for a callback who need to unreference an old object from a mempool and reference the new one instead.

Memcpy is taken care by the mempool.

## Function Documentation

static void* eina_mempool_realloc | ( | Eina_Mempool * | mp,
|  | void * | element,
|  | unsigned int | size
| ) |  |
| inline static

Re-allocate an amount memory by the given mempool.

Parameters

  mp | The mempool.
  element | The element to re-allocate.
  size | The size in bytes to re-allocate.

Returns
  The newly re-allocated data.

This function re-allocates and returns `element` with `size` bytes using the mempool `mp`. If not used anymore, the data must be freed with eina_mempool_free().

Warning
  No checks are done for `mp`.

static void* eina_mempool_malloc | ( | Eina_Mempool * | mp,
|  | unsigned int | size
| ) |  |
| inline static

Allocate memory using the given mempool.

Parameters

  mp | The mempool.
  size | The size in bytes to allocate.

Returns
  The newly allocated data.

This function allocates and returns `size` bytes using the mempool `mp`. If not used anymore, the data must be freed with eina_mempool_free().

Warning
  No checks are done for `mp`.

Referenced by eina_cow_write(), eina_rectangle_new(), eina_rectangle_pool_request(), eina_simple_xml_attribute_new(), eina_simple_xml_node_load(), eina_simple_xml_node_tag_new(), eina_value_array_new(), eina_value_hash_new(), eina_value_list_new(), eina_value_new(), and eina_value_struct_new().

static void* eina_mempool_calloc | ( | Eina_Mempool * | mp,
|  | unsigned int | size
| ) |  |
| inline static

Allocate and zero memory using the given mempool.

Parameters

  mp | The mempool.
  size | The size in bytes to allocate.

Returns
  The newly allocated data.

This function allocates, zeroes, and returns `size` bytes using the mempool `mp`. If not used anymore, the data must be freed with eina_mempool_free().

Warning
  No checks are done for `mp`.

Since
  1.2

static void eina_mempool_free | ( | Eina_Mempool * | mp,
|  | void * | element
| ) |  |
| inline static

Free resources previously allocated by the given mempool.

Parameters

  mp | The mempool.
  element | The data to free.

This function frees `element` allocated by `mp`. `element` must have been obtained from eina_mempool_malloc(), eina_mempool_calloc(), or eina_mempool_realloc().

Warning
  No checks are done for `mp`.

Referenced by edje_edit_part_del(), eina_cow_free(), eina_rectangle_free(), eina_rectangle_pool_free(), eina_rectangle_pool_release(), eina_simple_xml_attribute_free(), eina_value_array_new(), eina_value_free(), eina_value_hash_new(), eina_value_list_new(), and eina_value_struct_new().