From 219768d524ca9df0c435d426f2392e9d87c33eaf Mon Sep 17 00:00:00 2001 From: nilspolek Date: Sun, 28 Jan 2024 22:19:26 +0100 Subject: [PATCH] gc --- bigint/build/bin/testbip | Bin 72952 -> 72952 bytes bigint/build/lib/libbigint.a | Bin 27544 -> 27544 bytes bigint/src/libbigint.a | Bin 27544 -> 27544 bytes bigint/tst/testbip | Bin 72952 -> 72952 bytes njvm.c | 10 +++++----- njvm.o | Bin 60064 -> 60320 bytes 6 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bigint/build/bin/testbip b/bigint/build/bin/testbip index de7823f4e1c4d985be2dba1b29eebe24a3342356..5e8c1f2d52be9619f28833fbed81ece2fc4a83f5 100755 GIT binary patch delta 137 zcmV;40CxZQxdiyR1h8lX5NxBaV-GzvD5rqH*Jeagc7u2Xmv{sLNCHyBx55Mg-Ub3v z!2ZgbrK%%!s1&vx%>{u2_yEs&r%}wVP6t1k7)EogMu)#Jq delta 137 zcmV;40CxZQxdiyR1h8lX5C~g39+HGG6qM?+AP|`uPtBNjU;CPAf18AP=Go?y-&vm38-{d8Lx6~Q| r-~k|M)Z7>N!>US(i?6L}Fi9oIXNO;Aw3GIQ!H2B*zoA^0)EogM_q9IV diff --git a/bigint/build/lib/libbigint.a b/bigint/build/lib/libbigint.a index c3dcd7f68a3401b3af48ed19fa966e935e63ae26..d7ce8d69c8bc42edb1763af31493971ef61cf8fb 100644 GIT binary patch delta 27 hcmbPnopHu>#tCvPX2#|w8J2l)U1 delta 27 hcmbPnopHu>#tCvPrY4q#802loH~ diff --git a/bigint/src/libbigint.a b/bigint/src/libbigint.a index c3dcd7f68a3401b3af48ed19fa966e935e63ae26..d7ce8d69c8bc42edb1763af31493971ef61cf8fb 100644 GIT binary patch delta 27 hcmbPnopHu>#tCvPX2#|w8J2l)U1 delta 27 hcmbPnopHu>#tCvPrY4q#802loH~ diff --git a/bigint/tst/testbip b/bigint/tst/testbip index de7823f4e1c4d985be2dba1b29eebe24a3342356..5e8c1f2d52be9619f28833fbed81ece2fc4a83f5 100755 GIT binary patch delta 137 zcmV;40CxZQxdiyR1h8lX5NxBaV-GzvD5rqH*Jeagc7u2Xmv{sLNCHyBx55Mg-Ub3v z!2ZgbrK%%!s1&vx%>{u2_yEs&r%}wVP6t1k7)EogMu)#Jq delta 137 zcmV;40CxZQxdiyR1h8lX5C~g39+HGG6qM?+AP|`uPtBNjU;CPAf18AP=Go?y-&vm38-{d8Lx6~Q| r-~k|M)Z7>N!>US(i?6L}Fi9oIXNO;Aw3GIQ!H2B*zoA^0)EogM_q9IV diff --git a/njvm.c b/njvm.c index 9c9fab4..28b20df 100644 --- a/njvm.c +++ b/njvm.c @@ -336,7 +336,6 @@ int heapSizeKiB; char *memTargetPtr; char *freeHeapPtr; char *halfHeapPtr; -int gcCount = 0; #define MSB (1 << (8 * sizeof(unsigned int) - 1)) #define IS_PRIMITIVE(objRef) (((objRef)->size & MSB) == 0) @@ -348,7 +347,7 @@ ObjRef copyObjectToFreeMem(ObjRef orig) { if (IS_PRIMITIVE(orig)) { size = GET_SIZE(orig); } else { - size = sizeof(void *) + sizeof(unsigned int) + sizeof(bool) + GET_SIZE(orig) * sizeof(ObjRef *); + size = sizeof(void *) + sizeof(unsigned int) + sizeof(bool) + (GET_SIZE(orig) * sizeof(void *)); } memcpy(freeHeapPtr, orig, size); ObjRef oldPtr = (ObjRef) freeHeapPtr; @@ -369,7 +368,6 @@ ObjRef relocate(ObjRef orig) { orig->forwardPointer = copy; } } - return copy; } @@ -419,12 +417,14 @@ void garbageCollector() { for (int i = 0; i < *sda.size; i++) { sda.sda[i] = relocate(sda.sda[i]); } - scan(); + for (int i = 0; i < *reg.size; i++) { + reg.stack[i].u.objRef = relocate(reg.stack[i].u.objRef); + } + scan(); if (purgeFlag) { memset(memToPurgePtr, 0, heapSizeKiB * 1024 / 2); } - gcCount++; } ObjRef alloc(unsigned int objectSize) { diff --git a/njvm.o b/njvm.o index ae21899c6535896de58ac57e9ec633944392db97..e02da5d0d128e9306d6e247626cac7fc8f4c01e3 100644 GIT binary patch delta 16107 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