some rename
This commit is contained in:
+6
-6
@@ -20,7 +20,7 @@ void *arena_allocator_alloc_func(
|
|||||||
}
|
}
|
||||||
allocated = borrow_allocator_alloc_func(&this->borrow_allocator, bytes, file, line);
|
allocated = borrow_allocator_alloc_func(&this->borrow_allocator, bytes, file, line);
|
||||||
if (allocated != NULL) {
|
if (allocated != NULL) {
|
||||||
this->total_allocated += bytes;
|
this->to_allocate += bytes;
|
||||||
return allocated;
|
return allocated;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -33,7 +33,7 @@ void arena_allocator_reset_func(arena_allocator_t *this, const char *file, int l
|
|||||||
(dyn_array_create_non_crashing_func_args_t) {
|
(dyn_array_create_non_crashing_func_args_t) {
|
||||||
.allocator=allocator_stdlib(),
|
.allocator=allocator_stdlib(),
|
||||||
.itemsize=sizeof(uint8_t),
|
.itemsize=sizeof(uint8_t),
|
||||||
.initial_capacity=this->total_allocated,
|
.initial_capacity=this->to_allocate,
|
||||||
.file=file,
|
.file=file,
|
||||||
.line=line,
|
.line=line,
|
||||||
}
|
}
|
||||||
@@ -42,8 +42,8 @@ void arena_allocator_reset_func(arena_allocator_t *this, const char *file, int l
|
|||||||
if (this->bytes == NULL) {
|
if (this->bytes == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dyn_array_capacity(this->bytes) < this->total_allocated) {
|
if (dyn_array_capacity(this->bytes) < this->to_allocate) {
|
||||||
size_t needed_bytes = this->total_allocated - dyn_array_length(this->bytes);
|
size_t needed_bytes = this->to_allocate - dyn_array_length(this->bytes);
|
||||||
uint8_t *new_bytes = dyn_array_grow_non_crashing_func(
|
uint8_t *new_bytes = dyn_array_grow_non_crashing_func(
|
||||||
this->bytes,
|
this->bytes,
|
||||||
needed_bytes,
|
needed_bytes,
|
||||||
@@ -107,10 +107,10 @@ static void *arena_allocator_resize_impl(void *this, void *old_ptr, size_t bytes
|
|||||||
} else {
|
} else {
|
||||||
void *new_buffer = borrow_allocator_resize_func(&t->borrow_allocator, old_ptr, bytes, file, line);
|
void *new_buffer = borrow_allocator_resize_func(&t->borrow_allocator, old_ptr, bytes, file, line);
|
||||||
if (new_buffer == NULL) return NULL;
|
if (new_buffer == NULL) return NULL;
|
||||||
// The bytes added to total_allocated is just an educated guess. If
|
// The bytes added to to_allocate is just an educated guess. If
|
||||||
// calling realloc, you are often allocating twice what you got from the
|
// calling realloc, you are often allocating twice what you got from the
|
||||||
// last malloc/realloc call.
|
// last malloc/realloc call.
|
||||||
t->total_allocated += bytes/2;
|
t->to_allocate += bytes/2;
|
||||||
return new_buffer;
|
return new_buffer;
|
||||||
}
|
}
|
||||||
return arena_allocator_alloc_func(
|
return arena_allocator_alloc_func(
|
||||||
|
|||||||
@@ -118,16 +118,17 @@ allocator_t borrow_allocator_interface(borrow_allocator_t *this);
|
|||||||
// It is intended to eventually stabilize and find the required size of the
|
// It is intended to eventually stabilize and find the required size of the
|
||||||
// memory chunk that is needed for a single frame.
|
// memory chunk that is needed for a single frame.
|
||||||
typedef struct arena_allocator {
|
typedef struct arena_allocator {
|
||||||
borrow_allocator_t borrow_allocator;
|
borrow_allocator_t borrow_allocator;
|
||||||
// Set to 0 when instantiating. Will be updated as the borrow allocator is
|
// Set to 0 when instantiating. Will be updated as the borrow allocator is
|
||||||
// used. Is used on reset to allocate a continous chunk of memory.
|
// used. Is used on reset to allocate a continous chunk of memory.
|
||||||
size_t total_allocated;
|
size_t to_allocate;
|
||||||
uint8_t *bytes;
|
size_t i;
|
||||||
|
uint8_t *bytes;
|
||||||
} arena_allocator_t;
|
} arena_allocator_t;
|
||||||
|
|
||||||
#define arena_allocator_create() \
|
#define arena_allocator_create() \
|
||||||
(arena_allocator_t) { \
|
(arena_allocator_t) { \
|
||||||
.borrow_allocator = borrow_allocator_create(), .total_allocated = 0, \
|
.borrow_allocator = borrow_allocator_create(), .to_allocate = 0, .i = 0, \
|
||||||
.bytes = NULL \
|
.bytes = NULL \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +144,15 @@ void *arena_allocator_alloc_func(
|
|||||||
void arena_allocator_reset_func(arena_allocator_t *this, const char *file, int line);
|
void arena_allocator_reset_func(arena_allocator_t *this, const char *file, int line);
|
||||||
#define arena_allocator_reset(THIS) \
|
#define arena_allocator_reset(THIS) \
|
||||||
arena_allocator_reset_func(THIS, __FILE__, __LINE__)
|
arena_allocator_reset_func(THIS, __FILE__, __LINE__)
|
||||||
|
void *arena_allocator_resize_func(
|
||||||
|
arena_allocator_t *this,
|
||||||
|
void *old_ptr,
|
||||||
|
size_t bytes,
|
||||||
|
const char *file,
|
||||||
|
int line
|
||||||
|
);
|
||||||
|
#define arena_allocator_resize(THIS, OLD_PTR, BYTES) \
|
||||||
|
arena_allocator_resize_func(THIS, OLD_PTR, BYTES, __FILE__, __LINE__)
|
||||||
void arena_allocator_destroy(arena_allocator_t *this);
|
void arena_allocator_destroy(arena_allocator_t *this);
|
||||||
allocator_t arena_allocator_interface(arena_allocator_t *this);
|
allocator_t arena_allocator_interface(arena_allocator_t *this);
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ int main() {
|
|||||||
allocator_alloc(allocator, 10);
|
allocator_alloc(allocator, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(aalloc.total_allocated == 10);
|
assert(aalloc.to_allocate == 10);
|
||||||
assert(borrow_allocator_count_allocations(&aalloc.borrow_allocator) == 0);
|
assert(borrow_allocator_count_allocations(&aalloc.borrow_allocator) == 0);
|
||||||
assert(dyn_array_capacity(aalloc.bytes) == 10);
|
assert(dyn_array_capacity(aalloc.bytes) == 10);
|
||||||
|
|
||||||
arena_allocator_destroy(&aalloc);
|
arena_allocator_destroy(&aalloc);
|
||||||
assert(aalloc.total_allocated == 0);
|
assert(aalloc.to_allocate == 0);
|
||||||
arena_allocator_destroy(&aalloc);
|
arena_allocator_destroy(&aalloc);
|
||||||
|
|
||||||
// test 2 //////////////////////////////////////////////////////////////////////
|
// test 2 //////////////////////////////////////////////////////////////////////
|
||||||
@@ -36,8 +36,8 @@ int main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
arena_allocator_reset(&aalloc);
|
arena_allocator_reset(&aalloc);
|
||||||
fprintf(stderr, "%zu\n", aalloc.total_allocated);
|
fprintf(stderr, "%zu\n", aalloc.to_allocate);
|
||||||
//assert(aalloc.total_allocated == MAX_ALIGN * 1000 + 1);
|
//assert(aalloc.to_allocate == MAX_ALIGN * 1000 + 1);
|
||||||
// TODO: WHAT is happening here?
|
// TODO: WHAT is happening here?
|
||||||
arena_allocator_destroy(&aalloc);
|
arena_allocator_destroy(&aalloc);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ Test(arena_allocator, repeated_allocations) {
|
|||||||
allocator_alloc(allocator, 10);
|
allocator_alloc(allocator, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
cr_assert_eq(aalloc.total_allocated, 10);
|
cr_assert_eq(aalloc.to_allocate, 10);
|
||||||
cr_assert_eq(borrow_allocator_count_allocations(&aalloc.borrow_allocator), 0);
|
cr_assert_eq(borrow_allocator_count_allocations(&aalloc.borrow_allocator), 0);
|
||||||
cr_assert_eq(dyn_array_capacity(aalloc.bytes), 10);
|
cr_assert_eq(dyn_array_capacity(aalloc.bytes), 10);
|
||||||
|
|
||||||
arena_allocator_destroy(&aalloc);
|
arena_allocator_destroy(&aalloc);
|
||||||
cr_assert_eq(aalloc.total_allocated, 0);
|
cr_assert_eq(aalloc.to_allocate, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(arena_allocator, alignment) {
|
Test(arena_allocator, alignment) {
|
||||||
@@ -34,8 +34,8 @@ Test(arena_allocator, alignment) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
arena_allocator_reset(&aalloc);
|
arena_allocator_reset(&aalloc);
|
||||||
fprintf(stderr, "%zu\n", aalloc.total_allocated);
|
fprintf(stderr, "%zu\n", aalloc.to_allocate);
|
||||||
cr_assert_eq(aalloc.total_allocated, MAX_ALIGN * 1000 + 1);
|
cr_assert_eq(aalloc.to_allocate, MAX_ALIGN * 1000 + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO somehow test reallocations
|
// TODO somehow test reallocations
|
||||||
|
|||||||
Reference in New Issue
Block a user