Default_Allocator module

allocator_proc

procedure2 overloadsSource

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.

Example↗
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
Example↗
memory := cast(*u8) allocator_proc(.ALLOCATE, 8, 0, null, null);
memory[0] = 1;
allocator_proc(.FREE, 0, 8, memory, null);

See also