The allocator procedure. It handles .ALLOCATE, .RESIZE, .FREE, .CREATE_HEAP, .DESTROY_HEAP and .IS_THIS_YOURS; allocator_data is the heap, or null for the default one. Allocation returns null when the size is invalid or memory runs out.
memory := cast(*u8) allocator_proc(.ALLOCATE, 8, 0, null, null);
memset(memory, 7, 8);
grown := cast(*u8) allocator_proc(.RESIZE, 64, 8, memory, null);
assert(grown[7] == 7);
allocator_proc(.FREE, 0, 64, grown, null);allocator_proc :: (
mode: Allocator_Mode,
requested_size: s64,
old_size: s64,
old_memory: *void,
allocator_data: *void
) -> *void
Parameters
- mode: Allocator_Mode
- requested_size: s64
- old_size: s64
- old_memory: *void
- allocator_data: *void
Returns
- *void
allocator_proc :: (
mode: Allocator_Mode,
size: s64,
old_size: s64,
old_memory: *void,
allocator_data: *void
) -> *void
The allocator procedure, backed by the C runtime's malloc. It handles .ALLOCATE, .RESIZE and .FREE, and returns null when memory runs out.
Parameters
- mode: Allocator_Mode
- size: s64
- old_size: s64
- old_memory: *void
- allocator_data: *void
Returns
- *void
memory := cast(*u8) allocator_proc(.ALLOCATE, 8, 0, null, null);
memory[0] = 1;
allocator_proc(.FREE, 0, 8, memory, null);