62 lines
1.8 KiB
C
62 lines
1.8 KiB
C
/* date = April 20th 2023 9:43 pm */
|
|
|
|
#ifndef BASE_MEMORY_H
|
|
#define BASE_MEMORY_H
|
|
|
|
#if !defined(ARENA_COMMIT_GRANULARITY)
|
|
#define ARENA_COMMIT_GRANULARITY Kilobytes(4)
|
|
#endif
|
|
|
|
#if !defined(ARENA_DECOMMIT_THRESHOLD)
|
|
#define ARENA_DECOMMIT_THRESHOLD Megabytes(64)
|
|
#endif
|
|
|
|
#if !defined(M_DEFAULT_RESERVE_SIZE)
|
|
#define M_DEFAULT_RESERVE_SIZE Megabytes(512)
|
|
#endif
|
|
|
|
#if !defined(M_COMMIT_BLOCK_SIZE)
|
|
#define M_COMMIT_BLOCK_SIZE Megabytes(64)
|
|
#endif
|
|
|
|
// We store this information in the header of the allocated memory for the arena!!!
|
|
typedef struct Arena Arena;
|
|
struct Arena {
|
|
U64 pos;
|
|
U64 commit_pos;
|
|
U64 capacity;
|
|
U64 align;
|
|
};
|
|
|
|
typedef struct ArenaTemp ArenaTemp;
|
|
struct ArenaTemp {
|
|
Arena *arena;
|
|
U64 pos;
|
|
};
|
|
|
|
root_function void m_change_memory_noop(void *ptr, U64 size);
|
|
|
|
root_function Arena* m_make_arena_reserve(U64 reserve_size);
|
|
root_function Arena* m_make_arena();
|
|
|
|
root_function void m_arena_release(Arena *arena);
|
|
root_function void* m_arena_push(Arena *arena, U64 size);
|
|
root_function void m_arena_pop_to(Arena *arena, U64 pos);
|
|
root_function void m_arena_pop(Arena* arena, U64 size);
|
|
root_function void m_arena_align(Arena *arena, U64 pow2_alignment);
|
|
root_function void* m_arena_push_zero(Arena *arena, U64 size);
|
|
root_function void m_arena_clear(Arena *arena);
|
|
|
|
#define PushArray(arena, type, count) (type *)m_arena_push((arena), sizeof(type)*(count))
|
|
#define PushArrayZero(arena, type, count) (type *)m_arena_push_zero((arena), sizeof(type)*(count))
|
|
|
|
//~ temp arena
|
|
|
|
root_function ArenaTemp m_arena_temp_begin(Arena *arena);
|
|
root_function void m_arena_temp_end(ArenaTemp temp);
|
|
|
|
// TODO(anton): Not sure when I should use this?
|
|
#define ArenaTempBlock(arena, name) ArenaTemp name = { 0 }; DeferLoop(name = m_arena_temp_begin(arena), m_arena_temp_end(name))
|
|
|
|
#endif //BASE_MEMORY_H
|