RTEMS 6.1-rc1
Files | Functions | Variables
Dynamic Memory Allocation

This group contains non-standard interfaces to use dynamic memory allocation. More...

Files

file  malloc.h
 This header file defines interfaces to support and use dynamic memory allocation.
 

Functions

void rtems_heap_set_sbrk_amount (ptrdiff_t sbrk_amount)
 
void rtems_heap_sbrk_greedy_allocate (Heap_Control *heap, size_t alloc_size)
 Greedy allocate that empties the sbrk memory. More...
 
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

void RTEMS_WARN_UNUSED_RESULT
 

Detailed Description

This group contains non-standard interfaces to use dynamic memory allocation.

Function Documentation

◆ rtems_calloc()

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.

Parameters
[in]nelemThe count of elements.
[in]elsizeThe size of each elements.
Return values
NULLThe memory allocation failed or nelem is zero or elsize is zero.
otherwiseThe begin address of the allocated memory area.

◆ rtems_heap_allocate_aligned_with_boundary()

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().

Returns
A pointer to the begin of the allocated memory area, or NULL if no memory is available or the parameters are inconsistent.

◆ rtems_heap_extend()

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.

Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSInvalid memory area.

◆ rtems_heap_greedy_allocate()

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.

See also
rtems_heap_greedy_free().

◆ rtems_heap_greedy_allocate_all_except_largest()

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.

See also
rtems_heap_greedy_free().

◆ rtems_heap_greedy_free()

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().

◆ rtems_heap_sbrk_greedy_allocate()

void rtems_heap_sbrk_greedy_allocate ( Heap_Control heap,
size_t  alloc_size 
)

Greedy allocate that empties the sbrk memory.

Afterwards all the sbrk avialable memory will have been allocated to the provided heap.

See also
rtems_heap_extend_via_sbrk().

◆ rtems_malloc()

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.

Parameters
[in]sizeThe memory area size in bytes.
Return values
NULLThe memory allocation failed or size is zero.
otherwiseThe begin address of the allocated memory area.

◆ rtems_malloc_dirty_memory()

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.

◆ rtems_memalign()

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.

Parameters
[in]pointerpoints to the user pointer
[in]alignmentis the desired alignment
[in]sizeis the allocation request size in bytes
Returns
This methods returns zero on success and a POSIX errno value to indicate the failure condition. On success *pointer will contain the address of the allocated memory.