This commit is contained in:
Georgios Samaras
2024-12-26 15:37:29 +01:00
parent 20a5361a64
commit fff5b9e4a5
4 changed files with 549 additions and 2 deletions
+25 -2
View File
@@ -6,7 +6,7 @@ arena_init(void *mem, ptrdiff_t size) {
Arena *arena = mem;
arena->mem = arena + 1;
arena->top = arena->mem;
arena->lim = arena->mem + size;
arena->lim = (char *) mem + size;
return arena;
}
@@ -15,9 +15,32 @@ align_forward(void *ptr, ptrdiff_t align) {
return (void *)(((uintptr_t)ptr + align - 1) & ~(align - 1));
}
static void
pretty_print_size(char buf[64], ptrdiff_t size) {
if (size < 1024) {
sprintf(buf, "%ld bytes", size);
}
else if (size < 1024 * 1024) {
sprintf(buf, "%ld KB", size / 1024);
}
else if (size < 1024 * 1024 * 1024) {
sprintf(buf, "%ld MB", size / (1024 * 1024));
}
else {
sprintf(buf, "%ld GB", size / (1024 * 1024 * 1024));
}
}
static void
arena_oom(Arena *arena, ptrdiff_t size, ptrdiff_t align) {
loge("Out of memory in arena %p: requested size %ld, align %ld", arena, size, align);
char used[64];
pretty_print_size(used, (uintptr_t) arena->top - (uintptr_t) arena->mem);
char available[64];
pretty_print_size(available, (uintptr_t) arena->lim - (uintptr_t) arena->top);
char requested[64];
pretty_print_size(requested, size);
loge("Out of memory in arena %p: %s used, %s available, %s requested, %ld alignment",
arena, used, available, requested, align);
BP();
}