From d9ac33720c2d5e1c35b0282292f8f1a61c123ddf Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 18 Mar 2020 22:24:19 -0700 Subject: gc: small memory support. * configure (small_mem): New variable. Provide help text and show default value of --small-mem option. Generate CONFIG_SMALL_MEM in config.h. * gc.c (HEAP_SIZE, CHECKOBJ_VEC_SIZE, MUTOBJ_VEC_SIZE, FULL_GC_INTERVAL, FRESHOBJ_VEC_SIZE, DFL_MALLOC_DELTA_THRESH): Define conservative values of these constants if CONFIG_SMALL_MEM is in effect. --- configure | 10 ++++++++++ gc.c | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/configure b/configure index fad3da0c..a32f5306 100755 --- a/configure +++ b/configure @@ -149,6 +149,7 @@ lit_align= extra_debugging= debug_support=y gen_gc=y +small_mem= have_dbl_decimal_dig= have_unistd= have_sys_stat= @@ -484,6 +485,14 @@ gen-gc [$gen_gc] When disabled, the garbage collector performs a full object traversal and sweep on each garbage collection. +small-mem [$small_mem] + + Use --small-mem to make the memory management use less memory, + for embedded systems with less RAM, at the possible cost of some + run-time penalty. Objects are allocated in smaller blocks, + and certain global book-keeping arrays in the generational garbage + collector are smaller, resulting in more frequent collections. + ! exit 1 fi @@ -3545,6 +3554,7 @@ $make conftest.clean [ -n "$debug_support" ] && printf "#define CONFIG_DEBUG_SUPPORT 1\n" >> config.h [ -n "$gen_gc" ] && printf "#define CONFIG_GEN_GC 1\n" >> config.h +[ "$small_mem" ] && printf "#define CONFIG_SMALL_MEM 1\n" >> config.h # # Regenerate config.make diff --git a/gc.c b/gc.c index f3a354c6..df9de0fb 100644 --- a/gc.c +++ b/gc.c @@ -46,12 +46,22 @@ #include "unwind.h" #define PROT_STACK_SIZE 1024 + +#if CONFIG_SMALL_MEM +#define HEAP_SIZE 4096 +#define CHECKOBJ_VEC_SIZE HEAP_SIZE +#define MUTOBJ_VEC_SIZE HEAP_SIZE +#define FULL_GC_INTERVAL 20 +#define FRESHOBJ_VEC_SIZE (2 * HEAP_SIZE) +#define DFL_MALLOC_DELTA_THRESH (16L * 1024 * 1024) +#else #define HEAP_SIZE 16384 #define CHECKOBJ_VEC_SIZE (2 * HEAP_SIZE) #define MUTOBJ_VEC_SIZE (2 * HEAP_SIZE) #define FULL_GC_INTERVAL 40 #define FRESHOBJ_VEC_SIZE (8 * HEAP_SIZE) #define DFL_MALLOC_DELTA_THRESH (64L * 1024 * 1024) +#endif #if HAVE_MEMALIGN || HAVE_POSIX_MEMALIGN #define OBJ_ALIGN (sizeof (obj_t)) -- cgit v1.2.3