day 21
This commit is contained in:
+25
-2
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user