mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Merge pull request #1817 from IanLilleyT/arena_allocation
Improved arena allocation with alignment
This commit is contained in:
@@ -52,15 +52,16 @@ arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
|
|||||||
|
|
||||||
switch mode {
|
switch mode {
|
||||||
case .Alloc:
|
case .Alloc:
|
||||||
total_size := size + alignment
|
#no_bounds_check end := &arena.data[arena.offset]
|
||||||
|
|
||||||
|
ptr := align_forward(end, uintptr(alignment))
|
||||||
|
|
||||||
|
total_size := size + ptr_sub((^byte)(ptr), (^byte)(end))
|
||||||
|
|
||||||
if arena.offset + total_size > len(arena.data) {
|
if arena.offset + total_size > len(arena.data) {
|
||||||
return nil, .Out_Of_Memory
|
return nil, .Out_Of_Memory
|
||||||
}
|
}
|
||||||
|
|
||||||
#no_bounds_check end := &arena.data[arena.offset]
|
|
||||||
|
|
||||||
ptr := align_forward(end, uintptr(alignment))
|
|
||||||
arena.offset += total_size
|
arena.offset += total_size
|
||||||
arena.peak_used = max(arena.peak_used, arena.offset)
|
arena.peak_used = max(arena.peak_used, arena.offset)
|
||||||
zero(ptr, size)
|
zero(ptr, size)
|
||||||
|
|||||||
Reference in New Issue
Block a user