From c5824ed63294c42e34760065ccafd8da224b3847 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 2 Aug 2024 16:19:33 -0700 Subject: [PATCH] Run GC more often --- images/apple/DRAWL.po | Bin 143360 -> 143360 bytes src/lisp/s-expr.pla | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/images/apple/DRAWL.po b/images/apple/DRAWL.po index a6ac5ce326136409346101247f70236a94266319..5a67cfbf93eced0dcd892a289adb18823c79e817 100644 GIT binary patch delta 6175 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 Vaw|DW{r_`xi&QqsRjEqO{{zjHL-YUu delta 6141 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 diff --git a/src/lisp/s-expr.pla b/src/lisp/s-expr.pla index ba4a896..4e7049c 100644 --- a/src/lisp/s-expr.pla +++ b/src/lisp/s-expr.pla @@ -123,7 +123,7 @@ const SWEEPSTACK_MAX = 16 byte sweep_stack_top = 0 var sweep_stack[SWEEPSTACK_MAX] // In-flight expressions -const GC_TRIGGER = 50 +const GC_TRIGGER = 200 byte gc_pull = 0 def mark_list(list)#0 @@ -252,6 +252,7 @@ end def new(size) var memptr + gc_pull++ memptr = heapalloc(size) if !memptr throw(exception, ERR_OUT_OF_MEM) @@ -262,11 +263,11 @@ end export def new_cons#1 var consptr + gc_pull++ if cons_free consptr = cons_free cons_free = cons_free=>link else - gc_pull++ consptr = new(t_cons) fin consptr=>link = cons_list @@ -280,11 +281,11 @@ end export def new_int(intlo, inthi)#1 var intptr + gc_pull++ if int_free intptr = int_free int_free = int_free=>link else - gc_pull++ intptr = new(t_numint) fin intptr=>link = int_list @@ -298,11 +299,11 @@ end export def new_float(extptr)#1 var floatptr + gc_pull++ if float_free floatptr = float_free float_free = float_free=>link else - gc_pull++ floatptr = new(t_numfloat) fin floatptr=>link = float_list @@ -316,6 +317,7 @@ def new_array(dim0, dim1, dim2, dim3) var ofst0, ofst1, ofst2, ofst3 var size, aptr, memptr + gc_pull++ if dim3 ofst3 = 2 ofst2 = dim3 * 2 @@ -378,6 +380,7 @@ export def new_string(strptr)#1 stringptr = match_string(strptr) if stringptr; return stringptr; fin // Return matching string alloclen = ^strptr | 15 // Round up size to 15 chars in length + gc_pull++ if string_free prevptr = NULL stringptr = string_free @@ -432,6 +435,7 @@ export def new_sym(symstr)#1 index = (^symstr ^ ^(symstr + 1 + ^symstr/2) << 2) & HASH_MASK symptr = match_sym(symstr, hashtbl[index]) if symptr; return symptr; fin // Return already existing symbol + gc_pull++ symptr = new(t_sym + ^symstr) symptr=>link = hashtbl[index] hashtbl[index] = symptr