|
Embedded SDK
Embedded SDK
|
Dynamic memory allocation implementation. More...
#include <stdio.h>#include <string.h>#include "exceptions.h"#include "errors.h"#include "os_helpers.h"#include "os_math.h"#include "os_print.h"#include "os_utils.h"#include "mem_alloc.h"
Go to the source code of this file.
Classes | |
| struct | header_s |
| struct | heap_t |
Macros | |
| #define | PAYLOAD_ALIGNEMENT 4 |
| #define | PAYLOAD_DATA_ALIGNEMENT 8 |
| #define | ALLOC_CHUNK_HEADER_SIZE 4 |
| #define | FREE_CHUNK_HEADER_SIZE 8 |
| #define | HEAP_HEADER_SIZE ((sizeof(heap_t) + PAYLOAD_DATA_ALIGNEMENT - 1) & ~(PAYLOAD_DATA_ALIGNEMENT - 1)) |
| #define | NB_LINEAR_SEGMENTS 5 |
| #define | NB_MAX_SEGMENTS 10 |
| #define | NB_SUB_SEGMENTS 4 |
| #define | GET_PTR(_heap, index) ((header_t *) (((uint8_t *) _heap) + ((index) << 3))) |
| #define | GET_IDX(_heap, _ptr) ((((uint8_t *) (_ptr)) - ((uint8_t *) _heap)) >> 3) |
| #define | GET_PREV(_heap, _ptr) ((header_t *) (((uint8_t *) _heap) + ((_ptr)->fprev << 3))) |
| #define | GET_NEXT(_heap, _ptr) ((header_t *) (((uint8_t *) _heap) + ((_ptr)->fnext << 3))) |
Typedefs | |
| typedef struct header_s | header_t |
Functions | |
| mem_ctx_t | mem_init (void *heap_start, size_t heap_size) |
| initializes the heap for this allocator | |
| void * | mem_alloc (mem_ctx_t ctx, size_t nb_bytes) |
| allocates a buffer of the given size, if possible | |
| void | mem_free (mem_ctx_t ctx, void *ptr) |
| frees the given buffer | |
| void | mem_parse (mem_ctx_t ctx, mem_parse_callback_t callback, void *data) |
| parse the heap | |
| void | mem_stat (mem_ctx_t *ctx, mem_stat_t *stat) |
| function used to get statistics (nb chunks, nb allocated chunks, total size) about the heap | |
Dynamic memory allocation implementation.
Definition in file mem_alloc.c.
| #define ALLOC_CHUNK_HEADER_SIZE 4 |
Definition at line 27 of file mem_alloc.c.
| #define FREE_CHUNK_HEADER_SIZE 8 |
Definition at line 29 of file mem_alloc.c.
| #define GET_IDX | ( | _heap, | |
| _ptr | |||
| ) | ((((uint8_t *) (_ptr)) - ((uint8_t *) _heap)) >> 3) |
Definition at line 54 of file mem_alloc.c.
| #define GET_NEXT | ( | _heap, | |
| _ptr | |||
| ) | ((header_t *) (((uint8_t *) _heap) + ((_ptr)->fnext << 3))) |
Definition at line 56 of file mem_alloc.c.
| #define GET_PREV | ( | _heap, | |
| _ptr | |||
| ) | ((header_t *) (((uint8_t *) _heap) + ((_ptr)->fprev << 3))) |
Definition at line 55 of file mem_alloc.c.
| #define GET_PTR | ( | _heap, | |
| index | |||
| ) | ((header_t *) (((uint8_t *) _heap) + ((index) << 3))) |
Definition at line 53 of file mem_alloc.c.
| #define HEAP_HEADER_SIZE ((sizeof(heap_t) + PAYLOAD_DATA_ALIGNEMENT - 1) & ~(PAYLOAD_DATA_ALIGNEMENT - 1)) |
Definition at line 31 of file mem_alloc.c.
| #define NB_LINEAR_SEGMENTS 5 |
Definition at line 35 of file mem_alloc.c.
| #define NB_MAX_SEGMENTS 10 |
Definition at line 48 of file mem_alloc.c.
| #define NB_SUB_SEGMENTS 4 |
Definition at line 50 of file mem_alloc.c.
| #define PAYLOAD_ALIGNEMENT 4 |
Definition at line 23 of file mem_alloc.c.
| #define PAYLOAD_DATA_ALIGNEMENT 8 |
Definition at line 25 of file mem_alloc.c.
| void * mem_alloc | ( | mem_ctx_t | ctx, |
| size_t | nb_bytes | ||
| ) |
allocates a buffer of the given size, if possible
| ctx | allocator context (returned by mem_init()) |
| nb_bytes | size in bytes of the buffer to allocate (must be > 0) |
Definition at line 320 of file mem_alloc.c.
| void mem_free | ( | mem_ctx_t | ctx, |
| void * | ptr | ||
| ) |
frees the given buffer
| ctx | allocator context (returned by mem_init()) |
| ptr | buffer previously allocated with mem_alloc |
Definition at line 406 of file mem_alloc.c.
| mem_ctx_t mem_init | ( | void * | heap_start, |
| size_t | heap_size | ||
| ) |
initializes the heap for this allocator
| heap_start | address of the heap to use |
| heap_size | size in bytes of the heap to use. It must be a multiple of 8, and at least 200 bytes but less than 32kBytes (max is exactly 32856 bytes) |
Definition at line 283 of file mem_alloc.c.
| void mem_parse | ( | mem_ctx_t | ctx, |
| mem_parse_callback_t | callback, | ||
| void * | data | ||
| ) |
parse the heap
| ctx | allocator context (returned by mem_init()) |
| ptr | buffer previously allocated with mem_alloc |
| data | context data, passed to given callback |
Definition at line 439 of file mem_alloc.c.
| void mem_stat | ( | mem_ctx_t * | ctx, |
| mem_stat_t * | stat | ||
| ) |
function used to get statistics (nb chunks, nb allocated chunks, total size) about the heap
| ctx | allocator context (returned by mem_init()) |
| ptr | buffer previously allocated with mem_alloc |
Definition at line 477 of file mem_alloc.c.