Arena allocate bytes
All checks were successful
CI / ci (ReleaseFast, ubuntu-latest) (push) Successful in 2m9s
CI / ci (ReleaseSmall, ubuntu-latest) (push) Successful in 2m6s
CI / ci (ReleaseSafe, ubuntu-latest) (push) Successful in 2m14s
CI / ci (Debug, ubuntu-latest) (push) Successful in 3m20s

This commit is contained in:
David Gonzalez Martin 2025-04-18 12:58:55 -06:00
parent d421189c45
commit 8bef7f8bd0

View File

@ -233,12 +233,21 @@ arena_allocate_bytes = fn (arena: &Arena, size: u64, alignment: u64) &u8
>aligned_offset = align_forward(arena.position, alignment);
>aligned_size_after = aligned_offset + size;
>arena_byte_pointer: &u8 = #pointer_cast(arena);
if (aligned_size_after > arena.os_position)
{
#trap();
>target_committed_size = align_forward(aligned_size_after, arena.granularity);
>size_to_commit = target_committed_size - arena.os_position;
>commit_pointer = arena_byte_pointer + arena.os_position;
os_commit(#int_from_pointer(commit_pointer), size_to_commit, {
.read = 1,
.write = 1,
zero,
});
arena.os_position = target_committed_size;
}
>arena_byte_pointer: &u8 = #pointer_cast(arena);
>result = arena_byte_pointer + aligned_offset;
arena.position = aligned_size_after;
assert(arena.position <= arena.os_position);
@ -246,6 +255,10 @@ arena_allocate_bytes = fn (arena: &Arena, size: u64, alignment: u64) &u8
return result;
}
arena_join_string = fn (arena: &Arena, pieces: [][]u8) []u8
{
}
GlobalState = struct
{
arena: &Arena,