summaryrefslogtreecommitdiff
path: root/source/base/base_arena.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/base/base_arena.c')
-rwxr-xr-xsource/base/base_arena.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/source/base/base_arena.c b/source/base/base_arena.c
index 76938bd..60133e0 100755
--- a/source/base/base_arena.c
+++ b/source/base/base_arena.c
@@ -30,21 +30,17 @@ arena_destroy(mem_arena *arena)
30 { 30 {
31 return; 31 return;
32 } 32 }
33 33 munmap(arena, arena->capacity + sizeof(mem_arena));
34 int code = munmap(arena, arena->capacity + sizeof(mem_arena));
35} 34}
36
37internal void * 35internal void *
38arena_alloc(mem_arena *arena, u64 size) 36arena_alloc(mem_arena *arena, u64 size, b32 zero)
39{ 37{
40 if (!arena) 38 if (!arena)
41 { 39 {
42 return NULL; 40 return NULL;
43 } 41 }
44
45 u64 aligned = Align(arena->current_position, ARENA_ALIGN); 42 u64 aligned = Align(arena->current_position, ARENA_ALIGN);
46 u64 new_pos = aligned + size; 43 u64 new_pos = aligned + size;
47
48 if (new_pos > arena->capacity) 44 if (new_pos > arena->capacity)
49 { 45 {
50 return NULL; 46 return NULL;
@@ -55,7 +51,7 @@ arena_alloc(mem_arena *arena, u64 size)
55 arena->previous_position = arena->current_position; 51 arena->previous_position = arena->current_position;
56 arena->current_position = aligned + size; 52 arena->current_position = aligned + size;
57 53
58 MemSet(out, size); 54 if (zero) MemSet(out, size);
59 55
60 return out; 56 return out;
61} 57}
@@ -92,7 +88,7 @@ arena_resize_align(mem_arena *arena, void *old_memory, u64 new_size, u64 old_siz
92 88
93 if (old_memory == NULL || old_size == 0) 89 if (old_memory == NULL || old_size == 0)
94 { 90 {
95 return (mem_arena *)arena_alloc(arena, new_size); 91 return (mem_arena *)arena_alloc(arena, new_size, 0);
96 } 92 }
97 else if ((old_mem >= arena->base_position && old_mem < arena->base_position + arena->capacity)) 93 else if ((old_mem >= arena->base_position && old_mem < arena->base_position + arena->capacity))
98 { 94 {
@@ -107,15 +103,16 @@ arena_resize_align(mem_arena *arena, void *old_memory, u64 new_size, u64 old_siz
107 } 103 }
108 else 104 else
109 { 105 {
110 void *new_memory = arena_alloc(arena, new_size); 106 void *new_memory = arena_alloc(arena, new_size, 0);
111 umm copy_size = old_size < new_size ? old_size : new_size; 107 umm copy_size = old_size < new_size ? old_size : new_size;
112 memmove(new_memory, old_mem, copy_size); 108 memmove(new_memory, old_mem, copy_size);
113 } 109 }
114 } 110 }
115 else 111 else
116 { 112 {
117 check(0); 113 warn(0);
118 } 114 }
115
119 return NULL; 116 return NULL;
120} 117}
121 118