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.
Definition at line 54 of file mem_alloc.c.
Definition at line 56 of file mem_alloc.c.
Definition at line 55 of file mem_alloc.c.
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.