#include <revolution/mem.h>
void* MEMAllocFromExpHeapEx(
MEMHeapHandle heap,
u32 size,
int alignment );
| heap | Expanded heap handle |
|---|---|
| size | Size of the memory block in bytes |
| alignment | Memory block alignment. The following values can be specified: 4, 8, 16, 32, 64, 128, -4, -8, -16, -32, -64, -128. |
When the memory block is allocated, the start address of this memory block is returned. When memory cannot be allocated, NULL is returned.
Allocates a memory block from the expanded heap. Memory block alignment is specified by alignment. If the alignment is a negative value, the memory block is allocated from the top of the free region in the heap.
The gap in memory caused by alignment is set by default to not be reused.
Use the MEMUseMarginOfAlignmentForExpHeap function to change this setting so that so that this alignment gap, or margin, can be reused as an free memory region. However, note that performance may be adversely affected if you specify an alignment value of 32 or more or -32 or less when you allocate memory because tiny free blocks will be registered whenever small gaps arise between memory blocks.
If the memory block is allocatable, the actual size of the memory block may be greater than the specified size. To determine the actual allocated size in bytes, use the MEMGetSizeForMBlockExpHeap function.
MEMAllocFromExpHeap, MEMFreeToExpHeap, MEMCreateExpHeap, MEMCreateExpHeapEx, MEMUseMarginOfAlignmentForExpHeap
2008/05/20 Changed the policy regarding use of gaps in alignment.
2006/03/01 Initial release.
CONFIDENTIAL