Memory Pool
[Tools]
These functions provide memory pool management. More...
Data Structures | |
struct | _Eina_Mempool_Backend |
struct | _Eina_Mempool |
Typedefs | |
typedef struct _Eina_Mempool | Eina_Mempool |
Mempool type. | |
typedef struct _Eina_Mempool_Backend | Eina_Mempool_Backend |
Mempool backend type. | |
Functions | |
static void * | eina_mempool_realloc (Eina_Mempool *mp, void *element, unsigned int size) |
Re-allocate a amount memory by the given mempool. | |
static void * | eina_mempool_malloc (Eina_Mempool *mp, unsigned int size) |
Allocate a amount memory by the given mempool. | |
static void | eina_mempool_free (Eina_Mempool *mp, void *element) |
Free the allocated ressources by the given mempool. | |
Eina_Mempool * | eina_mempool_add (const char *module, const char *context, const char *options,...) |
void | eina_mempool_del (Eina_Mempool *mp) |
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
andememoa_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. Usefull when you know in advance how many object of some type will live during the life of the mempool.
Function Documentation
static void * eina_mempool_realloc | ( | Eina_Mempool * | mp, | |
void * | element, | |||
unsigned int | size | |||
) | [inline, static] |
Re-allocate a 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 element
with size
bytes, using the mempool mp
and returns the allocated data. If not used anymore, the data must be freed with eina_mempool_free(). No check is done on mp
, so it must be a valid mempool.
static void * eina_mempool_malloc | ( | Eina_Mempool * | mp, | |
unsigned int | size | |||
) | [inline, static] |
Allocate a amount memory by the given mempool.
- Parameters:
-
mp The mempool. size The size in bytes to allocate.
- Returns:
- The newly allocated data.
This function allocates size
bytes, using the mempool mp
and returns the allocated data. If not used anymore, the data must be freed with eina_mempool_free(). No check is done on mp
, so it must be a valid mempool.
static void eina_mempool_free | ( | Eina_Mempool * | mp, | |
void * | element | |||
) | [inline, static] |
Free the allocated ressources 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 by eina_mempool_malloc() or eina_mempool_realloc(). No check is done on mp
, so it must be a valid mempool.