Typedefs | Functions | Variables
Memory Pool

This group discusses the functions that provide memory pool management. More...

Typedefs

typedef struct _Eina_Mempool Eina_Mempool
 The opaque type for the mempool structure.
 
typedef struct _Eina_Mempool_Backend Eina_Mempool_Backend
 The opaque type for the mempool backend type.
 
typedef void(* Eina_Mempool_Repack_Cb) (void *dst, void *src, void *data)
 The callback type which is called when the mempool "repacks" its data. More...
 

Functions

Eina_Mempooleina_mempool_add (const char *name, const char *context, const char *options,...)
 Creates a new mempool of the given type. More...
 
void eina_mempool_del (Eina_Mempool *mp)
 Deletes the given mempool. More...
 
static void * eina_mempool_realloc (Eina_Mempool *mp, void *element, unsigned int size)
 Re-allocates an amount memory by the given mempool. More...
 
static void * eina_mempool_malloc (Eina_Mempool *mp, unsigned int size)
 Allocates memory using the given mempool. More...
 
static void * eina_mempool_malloc_near (Eina_Mempool *mp, void *after, void *before, unsigned int size)
 Allocates memory in the given mempool using locality hint to improve future memory access use. More...
 
static void * eina_mempool_calloc (Eina_Mempool *mp, unsigned int size)
 Allocates and zeros memory using the given mempool. More...
 
static void eina_mempool_free (Eina_Mempool *mp, void *element)
 Frees resources previously allocated by the given mempool. More...
 
void eina_mempool_repack (Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data)
 Repacks the objects in the mempool. More...
 
void eina_mempool_gc (Eina_Mempool *mp)
 Runs a garbage collection cycle. More...
 
static Eina_Bool eina_mempool_from (Eina_Mempool *mp, void *element)
 Check if a pointer is a valid element from the mempool. More...
 
void eina_mempool_statistics (Eina_Mempool *mp)
 Has the backend update its internal statistics. More...
 
static Eina_Iteratoreina_mempool_iterator_new (Eina_Mempool *mp)
 Provide an iterator to walk all allocated elements from a specified mempool. More...
 
Eina_Bool eina_mempool_register (Eina_Mempool_Backend *be)
 Registers the given memory pool backend. More...
 
void eina_mempool_unregister (Eina_Mempool_Backend *be)
 Unregisters the given memory pool backend. More...
 
static unsigned int eina_mempool_alignof (unsigned int size)
 Computes the alignment that would be used when allocating a object of size size. More...
 

Variables

Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE
 

Detailed Description

This group discusses the functions that provide memory pool management.

Several mempools are available:

Typedef Documentation

◆ Eina_Mempool_Repack_Cb

Eina_Mempool_Repack_Cb

The callback type which is called when the mempool "repacks" its data.

I.e. moves it around to optimize the way it is stored in memory. This is useful to improve data locality and to free internal pools back to the OS.

Note
The callback needs to update users of the data to stop accessing the object from the old location and access it using the new location instead. The copy of memory is taken care of by the mempool.

Function Documentation

◆ eina_mempool_add()

Eina_Mempool* eina_mempool_add ( const char *  name,
const char *  context,
const char *  options,
  ... 
)

Creates a new mempool of the given type.

Parameters
[in]nameName of the mempool kind to use.
[in]contextIdentifier of the mempool created (for debug purposes).
[in]optionsUnused. Use the variable arguments list instead to pass options to the mempool.
[in]...Additional options to pass to the allocator; depends entirely on the type of mempool ("int pool size" for chained and "int item_size" for one_big.
Returns
Newly allocated mempool instance, NULL otherwise.

References DBG, and EINA_SAFETY_ON_NULL_RETURN_VAL.

Referenced by eina_cow_add().

◆ eina_mempool_del()

void eina_mempool_del ( Eina_Mempool mp)

Deletes the given mempool.

Parameters
[in]mpThe mempool to delete

Referenced by eina_cow_del().

◆ eina_mempool_realloc()

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

Re-allocates an amount memory by the given mempool.

Parameters
[in]mpThe mempool
[in]elementThe element to re-allocate
[in]sizeThe size in bytes to re-allocate
Returns
The newly re-allocated data
Note
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.
See also
eina_mempool_free()

◆ eina_mempool_malloc()

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

Allocates memory using the given mempool.

Parameters
[in]mpThe mempool
[in]sizeThe size in bytes to allocate
Returns
The newly allocated data
Note
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.
See also
eina_mempool_free()

Referenced by eina_cow_write(), eina_quadtree_add(), 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().

◆ eina_mempool_malloc_near()

static void* eina_mempool_malloc_near ( Eina_Mempool mp,
void *  after,
void *  before,
unsigned int  size 
)
inlinestatic

Allocates memory in the given mempool using locality hint to improve future memory access use.

Parameters
[in]mpThe mempool
[in]afterHint to the nearest pointer after which to try find an empty spot.
[in]beforeHint to the nearest pointer before which to try find an empty spot.
[in]sizeThe size in bytes to allocate
Returns
The newly allocated data that might be near after and before.

This function is to be used to improve cache locality of structure that are likely to be used one after another. An example of this use would be Eina_List.

Note
This function allocates and returns size bytes using the mempool mp. If not used anymore, the data must be freed with eina_mempool_free().
after and before must be either NULL or allocated by the same mempool mp. They are hint and if no space near them is found, memory will be allocated without locality improvement.
Warning
No checks are done for mp.
See also
eina_mempool_free()

◆ eina_mempool_calloc()

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

Allocates and zeros memory using the given mempool.

Parameters
[in]mpThe mempool
[in]sizeThe 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
See also
eina_mempool_free()

Referenced by eina_promise_continue_new(), and eina_promise_new().

◆ eina_mempool_free()

static void eina_mempool_free ( Eina_Mempool mp,
void *  element 
)
inlinestatic

◆ eina_mempool_repack()

void eina_mempool_repack ( Eina_Mempool mp,
Eina_Mempool_Repack_Cb  cb,
void *  data 
)

Repacks the objects in the mempool.

Parameters
[in]mpThe mempool
[in]cbA callback to update the pointers the objects with their new location
[in]dataData to pass as third argument to cb
See also
Eina_Mempool_Repack_Cb
_Eina_Mempool_Backend

◆ eina_mempool_gc()

void eina_mempool_gc ( Eina_Mempool mp)

Runs a garbage collection cycle.

Parameters
[in]mpThe mempool

◆ eina_mempool_from()

static Eina_Bool eina_mempool_from ( Eina_Mempool mp,
void *  element 
)
inlinestatic

Check if a pointer is a valid element from the mempool.

Parameters
[in]mpThe mempool
[in]elementThe data to free
Returns
EINA_TRUE if the element is a valid element of the mempool, EINA_FALSE otherwise
Since
1.20

◆ eina_mempool_statistics()

void eina_mempool_statistics ( Eina_Mempool mp)

Has the backend update its internal statistics.

Parameters
[in]mpThe mempool

◆ eina_mempool_iterator_new()

static Eina_Iterator* eina_mempool_iterator_new ( Eina_Mempool mp)
inlinestatic

Provide an iterator to walk all allocated elements from a specified mempool.

Parameters
[in]mpThe mempool
Returns
NULL if it is not possible to iterate over the mempool, a valid iterator otherwise.
Note
This call is expected to be slow and should not be used in any performance critical area.
Since
1.23

◆ eina_mempool_register()

Eina_Bool eina_mempool_register ( Eina_Mempool_Backend be)

Registers the given memory pool backend.

Parameters
[in]beThe backend
Returns
EINA_TRUE if backend has been correctly registered, EINA_FALSE otherwise.

References DBG, eina_hash_add(), EINA_SAFETY_ON_NULL_RETURN_VAL, and _Eina_Mempool_Backend::name.

◆ eina_mempool_unregister()

void eina_mempool_unregister ( Eina_Mempool_Backend be)

Unregisters the given memory pool backend.

Parameters
[in]beThe backend

References DBG, eina_hash_del(), EINA_SAFETY_ON_NULL_RETURN, and _Eina_Mempool_Backend::name.

◆ eina_mempool_alignof()

static unsigned int eina_mempool_alignof ( unsigned int  size)
inlinestatic

Computes the alignment that would be used when allocating a object of size size.

Parameters
[in]size
Returns
The alignment for an allocation of size size.

References EINA_UNLIKELY.

Referenced by eina_cow_add().