From f0c7f31655f47d3292dfa237c771b77dc2986228 Mon Sep 17 00:00:00 2001 From: Elias Bennour Date: Sun, 28 Jan 2024 20:41:04 +0100 Subject: [PATCH] .... --- CMakeLists.txt | 3 ++- bigint/build/bin/testbip | Bin 72984 -> 72984 bytes bigint/build/lib/libbigint.a | Bin 27728 -> 27728 bytes bigint/src/libbigint.a | Bin 27728 -> 27728 bytes bigint/tst/testbip | Bin 72984 -> 72984 bytes njvm.c | 12 ++++++------ njvm.h | 11 +++++++++++ njvm.o | Bin 59640 -> 59720 bytes support.o | Bin 3544 -> 3560 bytes 9 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 njvm.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d44b8df..85bf666 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,8 @@ set(CMAKE_C_STANDARD 99) add_compile_options(-g -Wall -pedantic) -add_executable(njvm njvm.c) +add_executable(njvm njvm.c + njvm.h) # Include directories for njvm executable target_include_directories(njvm PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/bigint/build/include) diff --git a/bigint/build/bin/testbip b/bigint/build/bin/testbip index 7c94e48bfe1b73ea8517d4ad446d6df3842e5e10..7d91ca7d3019af490505386ca313152d84166a9a 100755 GIT binary patch delta 137 zcmV;40CxYFx&)ZI1h8lX5akQFWZfY(?2H4+AL3~Nu!DF6mv{sLNCKFxx55Mg-Ub4g zt(T$;0saD*t+%2K0WuCCAkXmPF8cB%r;HT9qp8-oYoA32n#jSIWYxV?8NUfUxAYnT r-~k{#6BBd4aLGw2P8$u7nW6kvz6$5M(hH<0-{cVErx&xA^c(>s4wO9z delta 137 zcmV;40CxYFx&)ZI1h8lX5Y3jqm3#m*IhAM9U4w`=>4SI#mv{sLNCMrfx55Mg-Ub5Q ztCyk+0saErtGA*I0WuCCiaQPP0ur;_i*sB$|LSVQjwHn`vYMq+=m-z0lRJxyxAYnT r-~k}`VGYoH4PPD=0Gu=Jh>2+A)w3ZfcSUj&y#s{>X=2%z^c(>s@LM{y diff --git a/bigint/build/lib/libbigint.a b/bigint/build/lib/libbigint.a index 2907fce2986cf547b2b74309d1359552cab29462..4c9a702e2b573fe6cd41e95079ac4c5fb90fc0a8 100644 GIT binary patch delta 25 hcmca`gYm)*#tHJw7KX+fm2?@IEetF+2QmK30swm72(thH delta 25 hcmca`gYm)*#tHJw#^weam2?@Ijm=Cq2QmK30swli2(JJD diff --git a/bigint/src/libbigint.a b/bigint/src/libbigint.a index 2907fce2986cf547b2b74309d1359552cab29462..4c9a702e2b573fe6cd41e95079ac4c5fb90fc0a8 100644 GIT binary patch delta 25 hcmca`gYm)*#tHJw7KX+fm2?@IEetF+2QmK30swm72(thH delta 25 hcmca`gYm)*#tHJw#^weam2?@Ijm=Cq2QmK30swli2(JJD diff --git a/bigint/tst/testbip b/bigint/tst/testbip index 7c94e48bfe1b73ea8517d4ad446d6df3842e5e10..7d91ca7d3019af490505386ca313152d84166a9a 100755 GIT binary patch delta 137 zcmV;40CxYFx&)ZI1h8lX5akQFWZfY(?2H4+AL3~Nu!DF6mv{sLNCKFxx55Mg-Ub4g zt(T$;0saD*t+%2K0WuCCAkXmPF8cB%r;HT9qp8-oYoA32n#jSIWYxV?8NUfUxAYnT r-~k{#6BBd4aLGw2P8$u7nW6kvz6$5M(hH<0-{cVErx&xA^c(>s4wO9z delta 137 zcmV;40CxYFx&)ZI1h8lX5Y3jqm3#m*IhAM9U4w`=>4SI#mv{sLNCMrfx55Mg-Ub5Q ztCyk+0saErtGA*I0WuCCiaQPP0ur;_i*sB$|LSVQjwHn`vYMq+=m-z0lRJxyxAYnT r-~k}`VGYoH4PPD=0Gu=Jh>2+A)w3ZfcSUj&y#s{>X=2%z^c(>s@LM{y diff --git a/njvm.c b/njvm.c index 639dd7e..86d44fc 100644 --- a/njvm.c +++ b/njvm.c @@ -417,23 +417,23 @@ void garbageCollector() { gcCount++; } -ObjRef alloc(unsigned int size) { - if (freeHeapPtr + size > halfHeapPtr) { +ObjRef alloc(unsigned int objectSize) { + if (freeHeapPtr + objectSize > halfHeapPtr) { garbageCollector(); - if (freeHeapPtr + size > halfHeapPtr) { + if (freeHeapPtr + objectSize > halfHeapPtr) { fprintf(stderr, "Heap is full\n"); exit(1); } } ObjRef or; or = (ObjRef) freeHeapPtr; - freeHeapPtr = freeHeapPtr + size; + freeHeapPtr = freeHeapPtr + objectSize; return or; } void heapAllocator(int n) { heapSizeKiB = n; - if ((heap = alloc(n * 1024)) == NULL) { + if ((heap = malloc(n * 1024)) == NULL) { perror("malloc"); exit(1); } @@ -503,7 +503,7 @@ int main(int argc, char *argv[]) { run = 1; } } - //heapAllocator(argVheapSizeKiB); + heapAllocator(argVheapSizeKiB); // Init the sda ObjRef s[sizeSDA]; sda.size = &sizeSDA; diff --git a/njvm.h b/njvm.h new file mode 100644 index 0000000..57c9238 --- /dev/null +++ b/njvm.h @@ -0,0 +1,11 @@ +// +// Created by Elias Bennour on 28.01.24. +// + +#ifndef NINJA_NJVM_H +#define NINJA_NJVM_H +#include "objref.c" + +ObjRef alloc(unsigned int size); + +#endif //NINJA_NJVM_H diff --git a/njvm.o b/njvm.o index 57daa1f552c2099463b3e61b42f8397a0e24a59e..e458976377dc079b290e893afaa7bee46931896e 100644 GIT binary patch delta 13610 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 FI0F5XVrKvV delta 728 zcmZ8fJ!lj`6rS1Hnccn3-eo*d*Ap%f#e^tPL>7y%fosfhK_pECMQ!BN#F!%Z3n2%B zU0h!ZivzI`gcJ%_Xptg}Pm@EbL)-;0v>t4p8jE^|&tAVI^*yO?AEW zTPxEv;gS~9x?1|9kC>(&GgG>PIce&^w6w)C=%_m#t&OU}-#9yV7dzq3Ptq&+Sz2wE zCt8>z