eCos Reference Manual
Prev |  | Next

# Variable Size Allocation Pools

## Name

cyg_mempool_var_create, cyg_mempool_var_delete, cyg_mempool_var_alloc, cyg_mempool_var_timed_alloc, cyg_mempool_var_try_alloc, cyg_mempool_var_free, cyg_mempool_var_waiting, cyg_mempool_var_get_info -- Variable Size Allocation Pools

## Synopsis

    #include <cyg/kernel/kapi.h>

``void cyg_mempool_var_create`(void* base, cyg_uint32 size, cyg_handle_t* varpool, cyg_mempool_var* var);`

``void cyg_mempool_var_delete`(cyg_handle_t varpool);`

``void* cyg_mempool_var_alloc`(cyg_handle_t varpool, cyg_uint32 size);`

``void* cyg_mempool_var_timed_alloc`(cyg_handle_t varpool, cyg_uint32 size, cyg_tick_count_t abstime);`

``void* cyg_mempool_var_try_alloc`(cyg_handle_t varpool, cyg_uint32 size);`

``void cyg_mempool_var_free`(cyg_handle_t varpool, void* p);`

``cyg_bool_t cyg_mempool_var_waiting`(cyg_handle_t varpool);`

``void cyg_mempool_var_get_info`(cyg_handle_t varpool, cyg_mempool_info* info);`

## Description

The variable size memory pool functions are used for allocating blocks of any size. Before memory can be allocated the pool must first be created by calling `cyg_mempool_var_create()`. The parameter `base` is a point to the bottom of the memory area to be used by the pool and `size` is the size of the memory area in bytes. It also takes a pointer to a `cyg_mempool_var` data structure which is typically statically allocated, and may be part of a larger data structure. It should be noted that some memory is take from the pool for book keeping purposes. If a memory pool is no longer required and there are not threads waiting to allocate memory from it, it can be destroyed with `cyg_mempool_var_delete()`.

Memory can be allocated from the pool using a number of functions. They all take the paramters`varpool`which indicates which pool should be used and the `size`which indicates who big a memory area should be allocated. `cyg_mempool_var_alloc()` will block until the memory becomes available. `cyg_mempool_tryalloc()`will try not block if no memory is available and will return `NULL`. Otherwise a pointer to the allocated memory will be returned. `cyg_mempool_var_timed_alloc()` will block if memory is not available and wait for memory to become available until the time`abstime` is reached. It will then return `NULL`.

Allocated memory can be freed using the function `cyg_mempool_var_free()`.

Lastly it is possible to query information about the pool using the function `cyg_mempool_var_get_info()`. This takes a pointer to the structure `cyg_mempool_info` which is:

    typedef struct {
        cyg_int32 totalmem;
        cyg_int32 freemem;
        void      *base;
        cyg_int32 size;
        cyg_int32 blocksize;
        cyg_int32 maxfree;
    } cyg_mempool_info;

Prev | Home | Next
eCos Memory Pools | Up | Fixed Size Allocation Pools