aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Moon Flower <moon@coffin.ir> 2025-03-10 10:28:19 +0330
committerGravatar Moon Flower <moon@coffin.ir> 2025-03-10 10:28:19 +0330
commitf56a4eccb41aa3b755e70417bb908279c16a8d20 (patch)
tree9687b17e6a4bf2000de7d5009556280af17e337c
parentAdd sbrk fallback (diff)
Improve allocation fallback
-rw-r--r--moonshine.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/moonshine.h b/moonshine.h
index 6578dc9..bbd2c63 100644
--- a/moonshine.h
+++ b/moonshine.h
@@ -1193,7 +1193,7 @@ var sbrkocator_alloc_new(u8 size) {
sbrk_block *new_block = sbrk(size + sizeof(sbrk_block));
// Out of sbrk memory.
- if(current_break < (var)new_block + size) return NULL;
+ if (current_break < (var) new_block + size) return NULL;
if (new_block == (sbrk_block *) -1) return NULL;
new_block->magic = sbrk_magic_number;
@@ -1297,9 +1297,14 @@ struct FoundPointer sbrkocator_find_pointer(car addr) {
const u8 MOONSHINE_ALLOCATOR_SWITCH_THRESHOLD = 1024 * 16;
var alloc(u8 size) {
- if (size > MOONSHINE_ALLOCATOR_SWITCH_THRESHOLD) return mmapocator_alloc(size);
+ if (size > MOONSHINE_ALLOCATOR_SWITCH_THRESHOLD) {
+ var mmap_ptr = mmapocator_alloc(size);
+ if (mmap_ptr == NULL) goto SBRK_ALLOC;
+ return mmap_ptr;
+ }
+SBRK_ALLOC:;
var sbrk_ptr = sbrkocator_alloc(size);
- if(sbrk_ptr == NULL) return mmapocator_alloc(size);
+ if (sbrk_ptr == NULL) return mmapocator_alloc(size);
return sbrk_ptr;
}
@@ -1545,7 +1550,7 @@ void collect_garbage(bool debug) {
}
}
- if (debug) println("Saved ", calculate_human_readable_size(total_saved), " of memory");
+ if (debug) println("[GC] Saved ", calculate_human_readable_size(total_saved), " of memory");
}
#define de(obj) (*(obj))