__rt_heap_extend()

Defined in rt_heap.h, this function returns a new block of memory to add to the heap, if possible.

If you reimplement __rt_stackheap_init(), you must reimplement this function. An incomplete prototype implementation is in rt_memory.s.

This function is not part of the C library standard, but the ARM C library supports it as an extension.

Show/hideSyntax

extern size_t __rt_heap_extend(size_t size, void **block);

Show/hideUsage

The calling convention is ordinary AAPCS. On entry, r0 is the minimum size of the block to add, and r1 holds a pointer to a location to store the base address.

The default implementation has the following characteristics:

  • The returned size is either:

    • In AArch32 state, a multiple of 8 bytes of at least the requested size

    • In AArch64 state, a multiple of 16 bytes of at least the requested size

    • 0, denoting that the request cannot be honored.

  • The returned base address is aligned on:

    • In AArch32 state, an 8-byte boundary

    • In AArch64 state, a 16-byte boundary

  • Size is measured in bytes.

  • The function is subject only to ARM Architecture Procedure Call Standard (AAPCS) constraints.

Show/hideReturns

The default implementation extends the heap if there is sufficient free heap memory. If it cannot, it calls __user_heap_extend() if it is implemented. On exit, r0 is the size of the block acquired, or 0 if nothing could be obtained, and the memory location r1 pointed to on entry contains the base address of the block.

Show/hideSee also

Copyright © 2014 ARM. All rights reserved.ARM DUI 0809B
Non-ConfidentialID121814