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.

Functions

static void * eina_mempool_realloc (Eina_Mempool *mp, void *element, unsigned int size)
 Re-allocate an amount memory by the given mempool.
static void * eina_mempool_malloc (Eina_Mempool *mp, unsigned int size)
 Allocate memory using the given mempool.
static void * eina_mempool_calloc (Eina_Mempool *mp, unsigned int size)
 Allocate and zero memory using the given mempool.
static void eina_mempool_free (Eina_Mempool *mp, void *element)
 Free resources previously allocated by the given mempool.
Eina_Mempooleina_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)
unsigned int eina_mempool_alignof (unsigned int size)

Variables

Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE

Detailed Description

These functions provide memory pool management.

Several mempool are available:

  • buddy: It uses the "buddy allocator" algorithm but the Eina implementation differs in the sense that the chunk information is not stored on the chunk itself, but on another memory area. This is useful for cases where the memory to manage might be slower to access, or limited (like video memory).
  • 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.
  • ememoa_fixed and ememoa_unknown: experimental allocators which could be useful when a fixed amount of memory is needed.
  • fixed_bitmap: It allocates with malloc) 32* the requested size and push the pool pointer in an rbtree. To find empty space in a pool, it will just search for the first bit set in an int (32 bits). Then, when a pointer is freed, it will do a search inside the rbtree.
  • 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

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_model_new(), 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 eina_model_new(), 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().