From 38e4c37f0f991122530a708148a6ec0e2a5a3eff Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Fri, 12 Aug 2022 18:22:49 -0700 Subject: Chapter 26.6 --- clox/src/memory.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'clox/src/memory.c') diff --git a/clox/src/memory.c b/clox/src/memory.c index c639b65..d1e0c5a 100644 --- a/clox/src/memory.c +++ b/clox/src/memory.c @@ -9,13 +9,20 @@ #include #endif +#define GC_HEAP_GROW_FACTOR 2 + void *reallocate(void *pointer, size_t oldSize, size_t newSize) { + vm.bytesAllocated += newSize - oldSize; if (newSize > oldSize) { #ifdef DEBUG_STRESS_GC collectGarbage(); #endif } + if (vm.bytesAllocated > vm.nextGC) { + collectGarbage(); + } + if (newSize == 0) { free(pointer); return NULL; @@ -175,6 +182,7 @@ static void sweep() { void collectGarbage() { #ifdef DEBUG_LOG_GC printf("-- gc begin\n"); + size_t before = vm.bytesAllocated; #endif markRoots(); @@ -182,8 +190,12 @@ void collectGarbage() { tableRemoveWhite(&vm.strings); sweep(); + vm.nextGC = vm.bytesAllocated * GC_HEAP_GROW_FACTOR; + #ifdef DEBUG_LOG_GC - printf("-- gd end\n"); + printf("-- gc end\n"); + printf(" collected %zu bytes (from %zu to %zu) next at %zu\n", + before - vm.bytesAllocated, before, vm.bytesAllocated, vm.nextGC); #endif } -- cgit v1.2.3-54-g00ecf