update arena allocator docs
This commit is contained in:
@@ -84,25 +84,6 @@ allocator_t allocator_from_borrow(borrow_allocator_t *this);
|
|||||||
|
|
||||||
// arena allocator /////////////////////////////////////////////////////////////
|
// arena allocator /////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// Arena allocator - provides fast bump-pointer allocation with reset
|
|
||||||
// capability.
|
|
||||||
//
|
|
||||||
// IMPORTANT: Arena allocators CANNOT be used as backing allocators for other
|
|
||||||
// arenas. When an arena is reset and has overflow allocations
|
|
||||||
// (bytes_outside_data), it calls allocator_reset() on its backing allocator.
|
|
||||||
// This would reset the backing arena and corrupt/destroy any data it contains,
|
|
||||||
// including other nested arenas.
|
|
||||||
//
|
|
||||||
// Use cases:
|
|
||||||
// - Fast per-frame or per-phase allocations that can be reset together
|
|
||||||
// - Temporary scratch space for computations
|
|
||||||
// - Building data structures that have similar lifetimes
|
|
||||||
//
|
|
||||||
// Backing allocator recommendations:
|
|
||||||
// - Use borrow_allocator as backing for testing/debugging
|
|
||||||
// - Use forever_allocator as backing for if the lifetime of the allocated
|
|
||||||
// items is the entire program duration.
|
|
||||||
// - DO NOT use another arena_allocator as backing
|
|
||||||
typedef struct arena_allocator {
|
typedef struct arena_allocator {
|
||||||
allocator_t allocator;
|
allocator_t allocator;
|
||||||
size_t size;
|
size_t size;
|
||||||
@@ -119,6 +100,37 @@ typedef struct arena_allocator {
|
|||||||
})
|
})
|
||||||
|
|
||||||
allocator_t allocator_from_arena(arena_allocator_t *this);
|
allocator_t allocator_from_arena(arena_allocator_t *this);
|
||||||
|
|
||||||
|
// Arena allocator - provides fast bump-pointer allocation with reset
|
||||||
|
// capability.
|
||||||
|
//
|
||||||
|
// IMPORTANT: Arena allocators CANNOT be used as backing allocators for other
|
||||||
|
// arenas. When an arena is reset and has overflow allocations
|
||||||
|
// (bytes_outside_data), it calls allocator_reset() on its backing allocator.
|
||||||
|
// This would reset the backing arena and corrupt/destroy any data it contains,
|
||||||
|
// including other nested arenas.
|
||||||
|
// Call reset before use, this allocates as many bytes as set in the initial
|
||||||
|
// capacity.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// with_borrow(backing) {
|
||||||
|
// allocator_t arena = arena_allocator_create(backing, 4 * MB);
|
||||||
|
// while (!WindowShouldClose) {
|
||||||
|
// allocator_reset(arena);
|
||||||
|
// // rest of update loop goes here
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Use cases:
|
||||||
|
// - Fast per-frame or per-phase allocations that can be reset together
|
||||||
|
// - Temporary scratch space for computations
|
||||||
|
// - Building data structures that have similar lifetimes
|
||||||
|
//
|
||||||
|
// Backing allocator recommendations:
|
||||||
|
// - Use borrow_allocator as backing for testing/debugging
|
||||||
|
// - Use forever_allocator as backing for if the lifetime of the allocated
|
||||||
|
// items is the entire program duration.
|
||||||
|
// - DO NOT use another arena_allocator as backing
|
||||||
#define arena_allocator_create(BACKING_ALLOCATOR, INITIAL_CAPACITY) \
|
#define arena_allocator_create(BACKING_ALLOCATOR, INITIAL_CAPACITY) \
|
||||||
allocator_from_arena(&arena_allocator_value(BACKING_ALLOCATOR, INITIAL_CAPACITY))
|
allocator_from_arena(&arena_allocator_value(BACKING_ALLOCATOR, INITIAL_CAPACITY))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user