RTEMS
5.1
|
#include <rtems.h>
#include <rtems/bspIo.h>
#include <rtems/libcsupport.h>
#include <rtems/score/memory.h>
#include <stdint.h>
Go to the source code of this file.
Typedefs | |
typedef void *(* | rtems_heap_extend_handler) (Heap_Control *heap, size_t alloc_size) |
typedef void(* | rtems_malloc_dirtier_t) (void *, size_t) |
Functions | |
void | RTEMS_Malloc_Initialize (const Memory_Information *mem, Heap_Initialization_or_extend_handler extend) |
void * | rtems_heap_extend_via_sbrk (Heap_Control *heap, size_t alloc_size) |
RTEMS Extend Heap via Sbrk. | |
void * | rtems_heap_null_extend (Heap_Control *heap, size_t alloc_size) |
void | rtems_malloc_dirty_memory (void *start, size_t size) |
Dirty Memory Function. More... | |
int | rtems_memalign (void **pointer, size_t alignment, size_t size) |
RTEMS Variation on Aligned Memory Allocation. More... | |
void * | rtems_heap_allocate_aligned_with_boundary (size_t size, uintptr_t alignment, uintptr_t boundary) RTEMS_MALLOCLIKE RTEMS_ALLOC_SIZE(1) RTEMS_ALLOC_ALIGN(2) RTEMS_WARN_UNUSED_RESULT |
Allocates a memory area of size size bytes from the heap. More... | |
void * | rtems_malloc (size_t size) RTEMS_MALLOCLIKE RTEMS_ALLOC_SIZE(1) RTEMS_WARN_UNUSED_RESULT |
Allocates a memory area of the specified size from the heap. More... | |
void * | rtems_calloc (size_t nelem, size_t elsize) RTEMS_MALLOCLIKE RTEMS_ALLOC_SIZE_2(1 |
Allocates a memory area for the specified count of elements from the heap. More... | |
rtems_status_code | rtems_heap_extend (void *area_begin, uintptr_t area_size) |
Extends the memory available for the heap using the memory area starting at area_begin of size area_size bytes. More... | |
void * | rtems_heap_greedy_allocate (const uintptr_t *block_sizes, size_t block_count) |
Greedy allocate that empties the heap. More... | |
void * | rtems_heap_greedy_allocate_all_except_largest (uintptr_t *allocatable_size) |
Greedy allocate all blocks except the largest free block. More... | |
void | rtems_heap_greedy_free (void *opaque) |
Frees space of a greedy allocation. More... | |
Variables | |
Heap_Control * | RTEMS_Malloc_Heap |
C program heap control. More... | |
ptrdiff_t | RTEMS_Malloc_Sbrk_amount |
const rtems_heap_extend_handler | rtems_malloc_extend_handler |
rtems_malloc_dirtier_t | rtems_malloc_dirty_helper |
void | RTEMS_WARN_UNUSED_RESULT |
This file defines the interface to RTEMS extensions to the Malloc Family.
void* rtems_calloc | ( | size_t | nelem, |
size_t | elsize | ||
) |
Allocates a memory area for the specified count of elements from the heap.
The allocated memory area is fully filled with zero bits.
This function is almost identical to calloc(). The only exception is that errno is not set in case of a memory allocation failure.
[in] | nelem | The count of elements. |
[in] | elsize | The size of each elements. |
NULL | The memory allocation failed or nelem is zero or elsize is zero. |
otherwise | The begin address of the allocated memory area. |
void* rtems_heap_allocate_aligned_with_boundary | ( | size_t | size, |
uintptr_t | alignment, | ||
uintptr_t | boundary | ||
) |
Allocates a memory area of size size bytes from the heap.
If the alignment parameter alignment is not equal to zero, the allocated memory area will begin at an address aligned by this value.
If the boundary parameter boundary is not equal to zero, the allocated memory area will comply with a boundary constraint. The boundary value specifies the set of addresses which are aligned by the boundary value. The interior of the allocated memory area will not contain an element of this set. The begin or end address of the area may be a member of the set.
A size value of zero will return a unique address which may be freed with free().
The memory allocated by this function can be released with a call to free().
NULL
if no memory is available or the parameters are inconsistent. rtems_status_code rtems_heap_extend | ( | void * | area_begin, |
uintptr_t | area_size | ||
) |
Extends the memory available for the heap using the memory area starting at area_begin of size area_size bytes.
There are no alignment requirements. The memory area must be big enough to contain some maintenance blocks. It must not overlap parts of the current heap areas. Disconnected subordinate heap areas will lead to used blocks which cover the gaps. Extending with an inappropriate memory area will corrupt the heap.
RTEMS_SUCCESSFUL | Successful operation. |
RTEMS_INVALID_ADDRESS | Invalid memory area. |
void* rtems_heap_greedy_allocate | ( | const uintptr_t * | block_sizes, |
size_t | block_count | ||
) |
Greedy allocate that empties the heap.
Afterwards the heap has at most block_count allocatable blocks of sizes specified by block_sizes. The block_sizes must point to an array with block_count members. All other blocks are used.
void* rtems_heap_greedy_allocate_all_except_largest | ( | uintptr_t * | allocatable_size | ) |
Greedy allocate all blocks except the largest free block.
Afterwards the heap has at most one allocatable block. This block is the largest free block if it exists. The allocatable size of this block is stored in allocatable_size. All other blocks are used.
void rtems_heap_greedy_free | ( | void * | opaque | ) |
Frees space of a greedy allocation.
The opaque argument must be the return value of rtems_heap_greedy_allocate() or rtems_heap_greedy_allocate_all_except_largest().
void* rtems_malloc | ( | size_t | size | ) |
Allocates a memory area of the specified size from the heap.
This function is almost identical to malloc(). The only exception is that errno is not set in case of a memory allocation failure.
[in] | size | The memory area size in bytes. |
NULL | The memory allocation failed or size is zero. |
otherwise | The begin address of the allocated memory area. |
void rtems_malloc_dirty_memory | ( | void * | start, |
size_t | size | ||
) |
Dirty Memory Function.
This method fills the specified area with a non-zero pattern to aid in debugging programs which do not initialize their memory allocated from the heap.
int rtems_memalign | ( | void ** | pointer, |
size_t | alignment, | ||
size_t | size | ||
) |
RTEMS Variation on Aligned Memory Allocation.
This method is a help memalign implementation which does all error checking done by posix_memalign() EXCEPT it does NOT place numeric restrictions on the alignment value.
[in] | pointer | points to the user pointer |
[in] | alignment | is the desired alignment |
[in] | size | is the allocation request size in bytes |
Heap_Control* RTEMS_Malloc_Heap |
C program heap control.
This is the pointer to the heap control structure used to manage the C program heap.