RTEMS CPU Kit with SuperCore
4.11.3
|
This file defines the interface to RTEMS extensions to the Malloc Family. More...
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 Heap_Area *areas, size_t area_count, 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) |
Allocates a memory area of size size bytes 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 |
This file defines the interface to RTEMS extensions to the Malloc Family.
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. Referenced by rtems_cache_aligned_malloc().
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_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.
Referenced by malloc_get_heap_pointer(), malloc_info(), and malloc_set_heap_pointer().