RTEMS: cpukit/include/rtems/malloc.h File Reference

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
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.
int | rtems_memalign (void **pointer, size_t alignment, size_t size)
| RTEMS Variation on Aligned Memory Allocation.
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.
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.
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.
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.
void * | rtems_heap_greedy_allocate (const uintptr_t *block_sizes, size_t block_count)
| Greedy allocate that empties the heap.
void * | rtems_heap_greedy_allocate_all_except_largest (uintptr_t *allocatable_size)
| Greedy allocate all blocks except the largest free block.
void | rtems_heap_greedy_free (void *opaque)
| Frees space of a greedy allocation.

## Variables
Heap_Control * | RTEMS_Malloc_Heap
| C program heap control.
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] | nelem | The count of elements.
  [in] | elsize | The size of each elements.

Return values

  NULL | The memory allocation failed or nelem is zero or elsize is zero.
  otherwise | The 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_SUCCESSFUL | Successful operation.
  RTEMS_INVALID_ADDRESS | Invalid 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] | size | The memory area size in bytes.

Return values

  NULL | The memory allocation failed or size is zero.
  otherwise | The 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] | pointer | points to the user pointer
  [in] | alignment | is the desired alignment
  [in] | size | is 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
| extern

C program heap control.

This is the pointer to the heap control structure used to manage the C program heap.