Arena allocate bytes
All checks were successful
All checks were successful
This commit is contained in:
parent
d421189c45
commit
8bef7f8bd0
@ -233,12 +233,21 @@ arena_allocate_bytes = fn (arena: &Arena, size: u64, alignment: u64) &u8
|
|||||||
>aligned_offset = align_forward(arena.position, alignment);
|
>aligned_offset = align_forward(arena.position, alignment);
|
||||||
>aligned_size_after = aligned_offset + size;
|
>aligned_size_after = aligned_offset + size;
|
||||||
|
|
||||||
|
>arena_byte_pointer: &u8 = #pointer_cast(arena);
|
||||||
|
|
||||||
if (aligned_size_after > arena.os_position)
|
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;
|
>result = arena_byte_pointer + aligned_offset;
|
||||||
arena.position = aligned_size_after;
|
arena.position = aligned_size_after;
|
||||||
assert(arena.position <= arena.os_position);
|
assert(arena.position <= arena.os_position);
|
||||||
@ -246,6 +255,10 @@ arena_allocate_bytes = fn (arena: &Arena, size: u64, alignment: u64) &u8
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
arena_join_string = fn (arena: &Arena, pieces: [][]u8) []u8
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
GlobalState = struct
|
GlobalState = struct
|
||||||
{
|
{
|
||||||
arena: &Arena,
|
arena: &Arena,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user