blob: 6d0ed0ddd456e7ebe00e9426f7ec8da806afacc4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#ifndef BASE_ARENA_UNIX_H
#define BASE_ARENA_UNIX_H
internal MemArena *
_arena_create(u64 capacity)
{
MemArena *arena = (MemArena *)mmap(
/* kernel decides where to throw the arena */
NULL,
capacity + sizeof(MemArena),
PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS,
-1,
0);
if(arena == MAP_FAILED)
return NULL;
arena->capacity = capacity;
arena->base_position = (u8 *)arena + sizeof(MemArena);
arena->current_position = 0;
arena->previous_position = 0;
return arena;
}
internal void
_arena_destroy(MemArena *arena)
{
if(!arena)
return;
munmap(arena, arena->capacity + sizeof(MemArena));
}
#endif /* BASE_ARENA_UNIX_H */
|