summaryrefslogtreecommitdiffstats
path: root/base/base_arena_win32.h
blob: fbf467982fb76d4513702b3264853e8d3f415e49 (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
36
#ifndef BASE_ARENA_WIN32_H
#define BASE_ARENA_WIN32_H

internal MemArena *
win32_arena_create(u64 capacity)
{
    MemArena *arena = (MemArena *)VirtualAlloc(
    NULL,
    capacity + sizeof(MemArena),
    MEM_COMMIT | MEM_RESERVE,
    PAGE_READWRITE);
    if(!arena)
    {
    return NULL;
    }

    arena->capacity          = capacity;
    arena->base_position     = (u8 *)arena + sizeof(MemArena);
    arena->current_position  = 0;
    arena->previous_position = 0;
    return arena;
    }

    internal void
    win32_arena_destroy(MemArena *arena)
    {
    if(!arena)
    {
    return;
    }

    VirtualFree(arena, 0, MEM_RELEASE);
    return;
}

#endif /* BASE_ARENA_WIN32 */