RTEMS  5.1
Typedefs | Functions | Variables
malloc.h File Reference
#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_ControlRTEMS_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
 

Detailed Description

This file defines the interface to RTEMS extensions to the Malloc Family.

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_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.

Variable Documentation

◆ RTEMS_Malloc_Heap

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.