From 38bfd5c7d9741d2ce2ccf8ac6514367adbc23f80 Mon Sep 17 00:00:00 2001 From: Elias Bennour Date: Sun, 28 Jan 2024 23:02:03 +0100 Subject: [PATCH] add heap size --- CMakeLists.txt | 7 +++++-- bigint/build/bin/testbip | Bin 72952 -> 72984 bytes bigint/build/lib/libbigint.a | Bin 27544 -> 27728 bytes bigint/src/bigint.o | Bin 27160 -> 27344 bytes bigint/src/libbigint.a | Bin 27544 -> 27728 bytes bigint/tst/support.o | Bin 3424 -> 3472 bytes bigint/tst/testbip | Bin 72952 -> 72984 bytes bigint/tst/testbip.o | Bin 44472 -> 44520 bytes heap.c | 33 +++++++++++++++++++++++++++++++++ heap.h | 12 ++++++++++++ njvm.c | 11 +++++++---- njvm.o | Bin 53656 -> 55376 bytes prog.bin | Bin 31612 -> 376 bytes record.c | 4 ++-- stackslot.c | 7 ++++--- support.c | 4 ++-- support.o | Bin 3400 -> 3456 bytes 17 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 heap.c create mode 100644 heap.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d44b8df..c3d3d4a 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) @@ -13,7 +14,9 @@ target_include_directories(njvm PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/bigint/build # Add the library add_library(bigint STATIC ${CMAKE_SOURCE_DIR}/bigint/src/bigint.c support.c - GC.c) + GC.c + heap.c + heap.h) # Include directories for the bigint library target_include_directories(bigint PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/bigint/build/include) diff --git a/bigint/build/bin/testbip b/bigint/build/bin/testbip index 90a0633bf5a8bac240b60cf260db343e1634fbc4..a22dcfbeabcc90025975cd324e331e0f2487db05 100755 GIT binary patch delta 461 zcmeydlV!#(mJJJ-nIvQ7vJbJF$wylK;-?tI_>$n)MZ|A}b@ChH%7;sXGI_LM&W delta 431 zcmbQSi{-~omJJJ-nSRJjUc~Ih$T0aWbG5*c(q`Saldb0T9BiJt*!l04$rUUs7#%h% zvbO)1+Qh`bkivifdw~2j21bUcW7`k0Fm7Yh`iiDNl^IooK9CR5Fntj><29`eH2E25 z{DnyBc^Jc(-Y{?f#lv`ynr??stOkJKMU-=BdP_U$+}CYzx@_MT+qOql=%*e2w|6JGRzMU;ouEHtlowSzZtR^>>yX w-^eYuu{&i~JF9@**4KsZGk*H1o|vp;-SIv}=VQ*U*t@%(y_J71R|ADO0A>!1f&c&j diff --git a/bigint/build/lib/libbigint.a b/bigint/build/lib/libbigint.a index 77e4227f1bc9236705fdbeac6bb7d4a3e5f382c2..ca54dc33560d18929058a7dab2a777326c26d168 100644 GIT binary patch delta 3306 zcmb_feN2^A7(eH{_rL{%02P4@uY#XrZ~^5@g~SlFP{gn6)Wua$kbC6{H)Cd9DVt;_ z;HzP2rgKhftIgeNHZ5JVKTI@fHEFHsW;1JRi?y0&QP1zZ=Y{V7p56C-p5JqxuXE0G z&U@~m8~pkJ?@o6V=M@#7nUuvR5Hr)|n&r-Qxm3t|H`iptrC`n%uQor?DFR4}-X|`Kj~WWEa=*?u zjpo#!;&AdrIgZ$EG)SJrWIFLLfFI+Kxy0`RpDbBy8Ug8u%^>3BPN>A3MFDb}`xIme3A%cURICnYR$~&!*ml+0uQL&5 zi#1|tKue&>##U(`$H5nk=e*n`#k({L$zf)!V z5u^`>ll?m)*?%IE9nvT;8=-CFoBMyXS6pG}j1YFKB^#oU{(X6oHa#aE=ZCG0kgDl7f!mBlLb)g9(JORg&yssr%f%yenT&WZ;@G2nASW9>&a?$D2>oEc(5R) z5l}@l#V#73ayZql1FI~i*>K|;*iN^nzg~qKhU=+LFBGOO{0s5=MzZZw*;43$I&k_7 zU7%L1t9J6uIFH3OJNbHAh>1mGLVlV7ulNctJ&DiObJ8iz> z5&1IlN1*dkg6y{Wmy_fh#GinCSBiY!)_-N1{Fr!rM~qIl{EYZZ(0R2;enEWb8-P7e z$SVYX2me}?d_erHSmO8ANI_GgoOXF+6!EJe?{1XI#H-|b0y2&G4UiuQN*D3F$lf^k zoSZ_uvOUx;XW06OJ7qrcanL`~ox$QT%-B8jl4AT@L=ud(@;Fg74eOXZWv(nUn{HuW5rf*wnJ6EyuH=rM@BC8wljg zZ`l%T*b;2Zd9q-TQ) zZffw8hw#CYca2(99sStpXseR(Ed$P?v7w=+fmi5$Y&hV{QRrn1hcs}9{xBtRv%7S0 z2$u+m^XNgtp$NQ4f2eRA0@rDb0~`39c7yLT@L8G|G#uT){kk9LKJZD6@ihhZT4{$^ zuNF+!3d=PhRCF0Y5#*-gu2yQxNkuVyI6}*+$73p zDI=NTaDduT9IZsDsXHIha_Z9lZ-)!ZKM}rfNyEVo!!zd(;^RPI3_&)_dAPeHw<7%^ z@3*ZLlODRq$HQM&Y)jGw%EDEiqImvZxMSl5&IinSjT5-X^frD)e@JqhHi`cLtOz2e delta 3126 zcma)8Yiv|S6rQH| zoS8W@b1!|%_kF`VMml`C6LXKHXY*0M-24KMXQDUPCcnv^%msk6Y}Ny^2`8V zlw7)y$#&FXQIC0<&)3c_HPf{M?uk@sF`T>18oh)+VIIl3prhOeaxgtyv}t+-Ij+ z>dGM&4NbEsGsD6c>#Sq!NfH!BE{hxEjDXU$DGJg)hB563F*B)azF6I(Ca#0NN1bOn zJbaXRpV)1H9wt7w`O!|%ZS(0#;*8B_xR}11K!iGv9~5(#sAd*;-Oh8w4dU^=k!9W; zy#6}$E{BsRi<`u*qe=1Cii1h)@hb0>}OZhlRG9IXeW}Bg<-V)F*#`=R;t|?L{)GRc)pE`L*&9nj+U$mV+`N|WHg+J2&|QucE2ERK z$fy(2xg13yXETpuIs{wg9?jzR05*`XIa$C} zwz@n!3eNII!5R4jkfoe{)LOL$S}z{x!m4HHZYt$MSY_yHndoGh%M0Ab5g1IirPlGA zqTnv4T&<}#baazztwchW5*ld*`auTz0Dh_wsI3@*s`Z^z=ronqc)DP<8rw%w0^myJ zqhf}~a^j~kJa8ONI;4|Sn053!xrxYOJy0lgjk0wuG_p=l%rkK%m+oY)8{m&$moD%o_0asp%+pin8AnJ2aUOLvTyntW>fyol23)N$E@0pj$_?II z;Nvt=G+f2Nmz5s(IPhVG@j3$6SZNy!FAW4^ltHG#2b4oRh0q^X^TdG$PFC~8n+SYD z>2b3FcdB_$Qn*+7!|8xNTfTQRs4OzLbSyXIM-a(pQctB$t&ciPQ5KmHPz6$l2sNQZ z*m#IgFlr#aPawh#tgKK75TQPl)j5I?9iyIU&>yv4>X6~{MU6zsL4-mbLX;Yc5h5Hi zWrbr3kxA21{=1b3b*QZH{RFEHQYn#q@9_cY8psTX9cBk`RT8CkojOENDgTj3ec7kl zQ;W&M!P4NF^ZSVjAh3jB0?T=bYHy!D@?j1|`}7f6IW;YThx9ojvU$e(ln<*46ZyDE aQT-{-J?7npQ9R3ZH-1GQ_qQACwSNKWZ|_k6 diff --git a/bigint/src/bigint.o b/bigint/src/bigint.o index 4e68f95420ef573ae35b673fe7cf9a26ca89ff9b..162ad9f334014e112fd16450027be8f3b967b58a 100644 GIT binary patch delta 3258 zcmb_eYiv|S6rP#8Q?|v{-2$asu@qXKAuWisMW6)=6o`HDDgi>5c4?uzbS*1Zf-ES8 zib%U$w2dHwgiuX1A*+ajiUbppf{=ieXd(oIXkubxG-wq)-`u&a`=80qp7WhKubDYB zcRH@}%h!0@O!vJ?rdp@NqE{jnWn$a1$XmI*`}mCkoL@F?@j|}J93hI`v-2#a_k~4& zHlG!R?mwnlD9a-3pn0C8X-~vT&zc^i&|RRVgS3Y`<~pM=t!lcZdq_*!EXE8HxqRkX zBiD1Uz#6_WNUIfD^rY!_(Q;^-G7!%itDW)#+;*D-S zYXkIK>O9Ml!H3K5iQNg9!Q?MCKf)<{Y<{Fm{%-S`sm$0*;5KzWFmAw6qQX3p?Q#A| zTpS;GKYBg;6<#-p(|D@G$=z}&v72a;JekRK;-3RQ*dZqozXN=VWC>{mq$44dh?6^^ z5`PjQSVBID1~?Mtf`}xNsdj+=d0?@5VWMZ~3K|kwA_)d)_o(wggV{ULGocA%jR@}+ zk!C?u1T_l90X=1*R#$>BXHH5DZ-&8oF-SzVAaT(kpg^$sVW|5RWG}-6d5XXoYwWCBH=_-)cFE zG^^y>GzzKQA{sSiA;{i#`X{^Kcpy_Fe>TuQXtI>cP8EoC65@e&L<*np3-wh@s0%Tn zx?)0Ij0trKhz)HXXgQxqgg3qk=c~!LGY<(=TPx71b*vRQMmk|}S`3+=Xqo;1)4+Q$ z?GY&x^yasyY(Idsw=dbhW0L(RCfWNM1*ajjjr=qIkJhU-`?o!wgtXc9VJy`|3+#X)IG6v4Cj)C)P`yop{^N6)-^|W3*(1lgYG(1$w_0Y;R^fJ-OGQWG= z6TS|G>9*85els*|b*j}Wu%QFDlPFY>B?r^3KsQw&{EKP?YF>{()y5twbec+N8eOo$ zYx{7`09>Pel+VksocPIx2kyd2n{qM_YHfW^)U^=NP9huCM(j28M)((+A5TeZ=z;Yp zwL6qXco95UkkSaMq8V)$jbAw&W7mOI7GrI=b_Hz5*~?$6!u7#5RHucxo&|p)URQs% zT`F4&9aI-im!S*PignRWz5(~KxMU|^OB-=GcW^jBD`31atcgg6u~lv++D?UUgqg%N zv2DgSr`%@q+aHoI5PtwV&%0!s&A*T=UnBkqOd(z+7YWKV;%gw^ z7m^vo?;v~Q)o0{r;+1Vjvm9^h?{ATliBE+7fwoMRh-oJ5qCY8yy-vhstdxg|s%2Qk zFDRK64EopActh(NH*CzQ zs%fnCWqX6coTA1JA>W43#+*66O+J5P(AShx?)Qe)HZ}z|=9GAA$`(~+2eqJI$NVWj zGs*9*dph9V;H~oo$U}6<)VGaFR2}_T=K!mc@htmdMdPD-o;Nji>v`fENgkYDkMvC=j8*v?1Oz5aGtwS|}Wd zP)}M5k1B|cQ_l+1AGQ0`A;WV=TcSiELSgIoB8nFx97?T)V-1l>)6)KXvITza%p}Ne<#X)pK;!8e!g}%uQG3~{hD`2 JkJr_S{{VtJ97g~E delta 3079 zcma)8eNa?Y6u8dkq!%P*%rT`$mGnv>V>*ed z>x@tIT-Swprn)-Lq`n0vWro9+7jCa-Y#IsjgB7-0Q~VyK>rfPAZ#rYz31W(% zikh_!`VMuTW=r7{#Jj}q225e%LyMni7yTALDMox|@u^OxcM}Lw=aFN=juX|4Q&}$i z0C8h@*c$?syv6sLn3KlU;3So=5OT^CY zFbO|RJZBMhG7GasB!FnqB$KU|{<$a3xRm1>HE`{1;ZUKc_f5({agXW}t_kawA+z)_yV964%*kvHrCnGgL;~y9abulE=rI1jA zA)zjZgc<^3<2oWu=Q%{U*9+(C$hSR=v|5e10)5KHT!D77@oVR`gyJZ3=+7AH*^Z&V zX^EL?^Y_SXcR_l8B-y`0lKnd**#`>wA`#j`?x_EwjdIQYIT%ht+U&-A+*mu!<==-W zLU-C?&5X{6BcmQjOF4={&ZdlGIt1I~9xdYtNYE!Ysoa9@M-Z{Xf{k+1DlJ$ivm1dm zNYAg0;5E2CM&YvwfXg{f3Pq|O2Ux|i^aNMR*{rZ&l`Mgk7OZ>>#;Yt?J_)eef@SHW zu#tQ%%>Z6)sY^0LU~x_eTs(agve=IwHCL^X){A?3v1+Nhi%K~kR;jvLCOTQhchg<| z6EK)#NzLOoSHVuZT&;N)wDpr~tw2H+>l<$d`cVdY4}NM8sACoa)#&@F&}k}dk#xao zwU&>VD8Ti~NBQCu(}|nLaL;Kt>5@(oVb(R` z%iWDxsK(Sua@x}S+s z;<0V|4!bC~_?=_La^ibo^FoZMvG^Bb#RlTvg8U_?z!J%^yE4Sf#N!>&_vDEE#D5B# zSMtRH;{DeEUM&=d3ETz$TCuo9{EP_V_m+#R#7n20)#5twt0C`d6t{?%0RlcTO#E|@ z_q2&$iN{N$A7~eU5S3#Ob%=Y!OZ&rngigyG1^eEvR2GF)Bc7o@p(Sr55~HsXn~2I~ zSj$AaaXoMK_+uo|EA&(vhAUJQ=~={nK&;If(QlOIXKUYU#`gRrla@BEZ>??Jn!T`o zOTF9ct8dL-;PrTFTk4iJwbWO6z3$CM{LIwwmL~URpVwXA99%T>ZM_mzL_gLSMt{`s zHUVc+u4t%H;1x=b0|Y!U23p2&=>qRm56w@^D4bj7KS3ghpQ4V2OAfe1Jv_MHfNK=S z1q^&nxxsr2e3~YThN~F(OQpv>4t!i;ypF)NX4-y+mj;4#Wss)u5#S9Zltmf@ zRDskXLQNr;4wV(YpJ3HRDkYNdJw70vqnY8b!|VvIN}|+mQiljC z3t|H`iptrC`n%uQor?DFR4}-X|`Kj~WWEa=*?u zjpo#!;&AdrIgZ$EG)SJrWIFLLfFI+Kxy0`RpDbBy8Ug8u%^>3BPN>A3MFDb}`xIme3A%cURICnYR$~&!*ml+0uQL&5 zi#1|tKue&>##U(`$H5nk=e*n`#k({L$zf)!V z5u^`>ll?m)*?%IE9nvT;8=-CFoBMyXS6pG}j1YFKB^#oU{(X6oHa#aE=ZCG0kgDl7f!mBlLb)g9(JORg&yssr%f%yenT&WZ;@G2nASW9>&a?$D2>oEc(5R) z5l}@l#V#73ayZql1FI~i*>K|;*iN^nzg~qKhU=+LFBGOO{0s5=MzZZw*;43$I&k_7 zU7%L1t9J6uIFH3OJNbHAh>1mGLVlV7ulNctJ&DiObJ8iz> z5&1IlN1*dkg6y{Wmy_fh#GinCSBiY!)_-N1{Fr!rM~qIl{EYZZ(0R2;enEWb8-P7e z$SVYX2me}?d_erHSmO8ANI_GgoOXF+6!EJe?{1XI#H-|b0y2&G4UiuQN*D3F$lf^k zoSZ_uvOUx;XW06OJ7qrcanL`~ox$QT%-B8jl4AT@L=ud(@;Fg74eOXZWv(nUn{HuW5rf*wnJ6EyuH=rM@BC8wljg zZ`l%T*b;2Zd9q-TQ) zZffw8hw#CYca2(99sStpXseR(Ed$P?v7w=+fmi5$Y&hV{QRrn1hcs}9{xBtRv%7S0 z2$u+m^XNgtp$NQ4f2eRA0@rDb0~`39c7yLT@L8G|G#uT){kk9LKJZD6@ihhZT4{$^ zuNF+!3d=PhRCF0Y5#*-gu2yQxNkuVyI6}*+$73p zDI=NTaDduT9IZsDsXHIha_Z9lZ-)!ZKM}rfNyEVo!!zd(;^RPI3_&)_dAPeHw<7%^ z@3*ZLlODRq$HQM&Y)jGw%EDEiqImvZxMSl5&IinSjT5-X^frD)e@JqhHi`cLtOz2e delta 3126 zcma)8Yiv|S6rQH| zoS8W@b1!|%_kF`VMml`C6LXKHXY*0M-24KMXQDUPCcnv^%msk6Y}Ny^2`8V zlw7)y$#&FXQIC0<&)3c_HPf{M?uk@sF`T>18oh)+VIIl3prhOeaxgtyv}t+-Ij+ z>dGM&4NbEsGsD6c>#Sq!NfH!BE{hxEjDXU$DGJg)hB563F*B)azF6I(Ca#0NN1bOn zJbaXRpV)1H9wt7w`O!|%ZS(0#;*8B_xR}11K!iGv9~5(#sAd*;-Oh8w4dU^=k!9W; zy#6}$E{BsRi<`u*qe=1Cii1h)@hb0>}OZhlRG9IXeW}Bg<-V)F*#`=R;t|?L{)GRc)pE`L*&9nj+U$mV+`N|WHg+J2&|QucE2ERK z$fy(2xg13yXETpuIs{wg9?jzR05*`XIa$C} zwz@n!3eNII!5R4jkfoe{)LOL$S}z{x!m4HHZYt$MSY_yHndoGh%M0Ab5g1IirPlGA zqTnv4T&<}#baazztwchW5*ld*`auTz0Dh_wsI3@*s`Z^z=ronqc)DP<8rw%w0^myJ zqhf}~a^j~kJa8ONI;4|Sn053!xrxYOJy0lgjk0wuG_p=l%rkK%m+oY)8{m&$moD%o_0asp%+pin8AnJ2aUOLvTyntW>fyol23)N$E@0pj$_?II z;Nvt=G+f2Nmz5s(IPhVG@j3$6SZNy!FAW4^ltHG#2b4oRh0q^X^TdG$PFC~8n+SYD z>2b3FcdB_$Qn*+7!|8xNTfTQRs4OzLbSyXIM-a(pQctB$t&ciPQ5KmHPz6$l2sNQZ z*m#IgFlr#aPawh#tgKK75TQPl)j5I?9iyIU&>yv4>X6~{MU6zsL4-mbLX;Yc5h5Hi zWrbr3kxA21{=1b3b*QZH{RFEHQYn#q@9_cY8psTX9cBk`RT8CkojOENDgTj3ec7kl zQ;W&M!P4NF^ZSVjAh3jB0?T=bYHy!D@?j1|`}7f6IW;YThx9ojvU$e(ln<*46ZyDE aQT-{-J?7npQ9R3ZH-1GQ_qQACwSNKWZ|_k6 diff --git a/bigint/tst/support.o b/bigint/tst/support.o index f5bd62d4ca32ad2fc9513f1a55fb800a22c741f6..7f7b6da30ec8194269cd247842b84b445476b43f 100644 GIT binary patch delta 720 zcmZ8fO=uHA6n-=NpWQS`MIj0$V4;oBtY{^-R8jCCZBklFE`=`X8jDGGO`_Bv@LDO@ z#u34zAnMIRZuMj@Vo&wdUJAv7M@zjaD89ElDD<&!-}im*V`k^g9-Ll3vwk_VVn7sC zHLfeY=`uU$y*lJMM?7OC))rsb^}$WqejdAE&=Ti(DKn+Td|1kF#C<-IX&+O!#b;Ds zNcF4qeivC~BD<`|bU~^+2>=CgMch$}**)3aklpik3~q^!N-+^S03_s+eXic%)=TMn zE#~wwa}Sx$^nJ0akCuKQVFT7GmW0V{`zL~Tq&Z;Q4B$QCqzc*}1cs`7z@pBP2wIwn zBmIOugf@0E$=A$^NEzA3dEz4v(39l7N3#+0@txvpX^+_GL+l}QXfu|l9;9hgiX0{j zisZW}*D!DYV=3N)fY>;#0ah7b+B^!H3Rl9g;pb}Ntua1Hc&X-fmx5Nut=57?zu<+T zdo^fv{Z_Z*Ui0tyjUe>fZl&RMZwBpV$DQf13Ek*s^%y?EVF}YkBAZ delta 672 zcmZ9JO-Nfo5XWctedoOxV`(84Bxt}WNU&8b6p|PP0}3LDq=!Om`-I?2UW_0_3%%Ea zrdufV)SmPr3ON-)(2L|!=*feZ;K8HDV|(h%%hE%KH#_tD&#?PucmHX-e?J>77!X)N zm9eq3$W9vH?|H`-pIDmZ#4k42_feKVce~)m6r(&H9niX*kn)zO^Gr1NpZZm_P+gPi zjqE)WF(nhr>s>5L^;-x)!8|TDl&RREte(g!*xlrXI9H}ZSqB24<21QC&#j8=s*4qU z%sfQWnSLa8^Z|7}OOKL2H9}&>z`% zM32LK&y0(R5&Q6)cz7GvFmJq1Fd`S%2;b`+Cra*M4auRy*a+32mkuS1qch*2zUOie z^W{H^@CIavCTI_^7ID$WP|#GEu2wxa{#G0q6N3w-H?`GTJvHlYxt?EjYpEH(Twblb zTPRiBW#9KUMbaFyDkX2T>U-{b^Ob3_$#dL|qd!A`jZPL!gYh;XfM8n8>Eg%?@x{6< y(l6i#G>d%mHX=!MV^Rt(7Lop1N_4H%MI|W(Pl8AjK0!x2YMzDuFqRiToU6YXZ)g1g diff --git a/bigint/tst/testbip b/bigint/tst/testbip index 90a0633bf5a8bac240b60cf260db343e1634fbc4..a22dcfbeabcc90025975cd324e331e0f2487db05 100755 GIT binary patch delta 461 zcmeydlV!#(mJJJ-nIvQ7vJbJF$wylK;-?tI_>$n)MZ|A}b@ChH%7;sXGI_LM&W delta 431 zcmbQSi{-~omJJJ-nSRJjUc~Ih$T0aWbG5*c(q`Saldb0T9BiJt*!l04$rUUs7#%h% zvbO)1+Qh`bkivifdw~2j21bUcW7`k0Fm7Yh`iiDNl^IooK9CR5Fntj><29`eH2E25 z{DnyBc^Jc(-Y{?f#lv`ynr??stOkJKMU-=BdP_U$+}CYzx@_MT+qOql=%*e2w|6JGRzMU;ouEHtlowSzZtR^>>yX w-^eYuu{&i~JF9@**4KsZGk*H1o|vp;-SIv}=VQ*U*t@%(y_J71R|ADO0A>!1f&c&j diff --git a/bigint/tst/testbip.o b/bigint/tst/testbip.o index 8acdffdc8b2ccfee22e4b6e2727cac1ccb105978..d8aaf398e799ab89f69ec568329082718b79700a 100644 GIT binary patch delta 2319 zcmY*bdrVtZ7(eIs7Ro4(J}6v4S0>ZxCXgu^E|P-aHllOD1{9e<1KnWhg*vLKN-RYG zSfU1+vn`nDh7pxN<|L`li5ll4OcS%k*UUyXqgj@iWrCU*XVmZe&S|^er1zZP@BF^U z{q8;A>3iq2%jdMIdZ#tY=$g~zXpP3(9^~`!mycS#(~NBp6S_fN6;&ILAxY8xr3OTSt;uNrshcemsg<yecE>G%Zv(*dn4=cv)i}@BnRPvYY~6AXV7&vQGHV@BHtqyK z*CO1xc|VZc?b71W|7eCexU|W_EDia8B(m8E#ciUv%^7P!;Trd}Dwqvk2sb;C9B|HL zOXp><$ju%kPZVkK-3932gG4@KMcSm-foS1liOO7vK0F4YV6CL+dgLxf^bxKx_rfaj zZDY@%TQex;+uWN&IA6_+wRj)J@ba&~ZE-S4IsZXI8D$MeSFj3U#J_FE=20~Fq4@xr z*YlsHejVl5z^_VJK}p`5H1~pe>rNx~1e*7xqxWV;@5_uHNSe!sl#qGG9I|G|=&>g7 z{!}`nSY}4!*JpGW;}c1rkP;Y5$UN&@(&t++aPt8Ad6^+; zJW6gPWS;YG>1K@F97dy)yae1(bxx8I^Z1LT>L96RQ1x{(*pXdE>~&<$6GL`OsbExd z37O}#N4hy}1-W?~jebiTEoT}@$UHM;(r6ssD>vUpBfo|ZN|CxWc;DIZ!sF2bP1Lm; z%?so*}#mso18eHOrc#eFY5e*$hv9mbWbkD$@G9JAO z^8&KB>!~Ey>lsN($PB$k8iios<|Q<0(T%WTFJms|6=b`0kH1!G=ScepvWt4jJ}7f7 z>K1iuBM>k`+vXGnWH+$8rBxZ~&A;*fEiJ(p74@NE3Wl2`yhhtE9%@GTol1PtyG!^w z4{mP=heJdCfymIv@Mx94e`Fw783>1~8b^jB!QsegRa5Y>U}z*9++Woa3Pkpd>^DcN zwg>um?DSWL6_M76KRa*E4+Zu{2pd3G2VTM$EeK#ag!3Q zz#NV0pw4(vAA|7`wN7sy@UOYJ${1~37(Z8-8W-Ttl%BRIV22%Ua8Vb6u~_P3jJ6{X zTa2GjcuMJM9|E3Ndiojw?^aczodwuQRc&O9K1d+0 zsWQ_p0=!jW`ZNJMlmn+K>tR))GoqvCo7fU4ux@xHs{ah7N{E|6QFO|J0yn>EN_d*1 pA)d)fMTa@S-n0r&T~y(btW^~i$EkR ziyzUbf#ytImbpQ6h9AR`)J!vn1~LuPL}wISvKeIfv4kHmHU42y-}gPIE%he!oacF; z_v5_xo^!ZyRr}9REOHp3C3Uv%drIx&Z_%DSHY)9KmVbV9tJ+5v*&=_;CTS( zp<1llf#mLdE#CDl&9H`ituJ?q&@G9KE6OGc19>qof)e*J)i48I2)EWC8Oj^TlEI6? z$gTBAo-feid#7>sX<`Lq1zMkX2GNDjB`TgpGBKWWAuL-&Ss_QuTYO_|x7lkRen5;9MZOZMyxEz6I;htn0s zGArs`TG2y{A4$f9lE6_y=2@FBV}1k!w}NPT7i0F!a&bqk+0uy2hl+veSrsPUMPVdl zo@;Iyria4pN2hUK1YxK<2Rk-0_;`TdkiMm?91c`kco zn9FvMTZhqUA?XPHfq`4+(5Xf@ql&$OwOFIb*6W_&CaE1F?L}lK^r8dMW&?E-IvyjC z@DOdAOO%k^#vYbl#i+Nw!rvdr1YcCwN_0%Ys9VBC+J5nfiEvUC-sde9zNe0sRJZQy zXzu9Vus!^IIMN;scWkI^x2)#2P<3ltxVF7La!`1KcRSizBL}1Hk?^w#fAD8bHVFzD z$&uC2aR$>D;i$xi+6Cj6%1$R6;A6^8hZ^8vg=zJG*FdTGl;gT!bjah1jlq0B{5=4F z&%jkNQvVi@(Xj=@ok}zgb9CAYeZz;&B^aMmcG^^c=d#fX0acPO6sCg+_=`$UTMn?x ziE75^RDrQj>SK(y7Z5v@fQ|^j2UI}XNq}EacDg43SE^Oh0Rp&R>FF~BJfigUb^-5I zU7?)oCU-y{$SlC|+s!J~pgayyDdV0CS4M zk6cl7YXXg%SsgM%N`-f +#include + +int maxHeapSize = 8192 * 1024; + +void* my_malloc(size_t size) { + static size_t total_allocated = 0; + + if (total_allocated + size > maxHeapSize) { + perror("Memory limit exceeded\n"); + exit(1); + } + + void* ptr = malloc(size); + if (ptr != NULL) { + total_allocated += size; + } + + return ptr; +} + +void initHeap(int size) { + maxHeapSize = size; +} + +#endif //NINJA_NJVM_H \ No newline at end of file diff --git a/heap.h b/heap.h new file mode 100644 index 0000000..3c0475a --- /dev/null +++ b/heap.h @@ -0,0 +1,12 @@ +// +// Created by Elias Bennour on 28.01.24. +// + +#ifndef NINJA_HEAP_H +#define NINJA_HEAP_H + +#include + +void* my_malloc(size_t size); + +#endif //NINJA_HEAP_H diff --git a/njvm.c b/njvm.c index d99c634..8fbcaad 100644 --- a/njvm.c +++ b/njvm.c @@ -1,3 +1,6 @@ +#ifndef NJVM +#define NJVM + #include #include #include @@ -9,6 +12,7 @@ #include "bigint.h" #include "record.c" #include "GC.c" +#include "heap.c" // Debug int debug = 0; @@ -16,7 +20,6 @@ int debug = 0; // Program struct program program; - unsigned fp; void version(void) { @@ -306,8 +309,6 @@ void tests(void) { } int main(int argc, char *argv[]) { - - // Initialize the Stack int size = SIZE; int current = 0; @@ -352,7 +353,7 @@ int main(int argc, char *argv[]) { // TODO: implement stack size } else if (strcmp(argv[i], "--heap") == 0) { i++; - // TODO: implement heap size + initHeap(atoi(argv[i]) * 1024); } else if (strcmp(argv[i], "--gcpurge") == 0) { // TODO: implement gcpurge } else { @@ -379,3 +380,5 @@ int main(int argc, char *argv[]) { return 1; } } + +#endif /* ifndef NJVM */ \ No newline at end of file diff --git a/njvm.o b/njvm.o index 9e0d7e215b1b62a9adb2e9d30f44a421cb39b483..7e3b2acef3925d9f429b2152abf7f205b5e2d44f 100644 GIT binary patch literal 55376 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 diff --git a/prog.bin b/prog.bin index a12da6ab15cb6c2e77d5f3889e3f6757b4ec8e1e..4f45bc1293ce76459bc2dc4d38ff91b0731cae94 100644 GIT binary patch literal 376 zcmZvY%?iRW5QL{z@CRawAmU%qgOA}wP|$~?koxU5mIw_Qc6PF}+2nCQU&oT( zz}8V(AHYCbk_IpWHJE`72%n~jM6-1od;fR_SOAqcx-upW(g%Tk?%kS;)T4B zwx$tXV<6XFxJ(9spa_v;CKt-Z3=IcseiPo}*j+;wG(# L_Fwg@^?J`QJ(VI_ literal 31612 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 diff --git a/record.c b/record.c index e67ca85..b6d4e7a 100644 --- a/record.c +++ b/record.c @@ -9,7 +9,7 @@ ObjRef newRecord(int size){ ObjRef record; unsigned int objSize; objSize = sizeof(*record) + (size * sizeof(void *)); - if((record = malloc(objSize)) == NULL){ + if((record = my_malloc(objSize)) == NULL){ perror("malloc"); } record->size = MSB; @@ -47,7 +47,7 @@ void setField(ObjRef arr, int point, ObjRef value){ else size = sizeof(*value) + (GET_ELEMENT_COUNT(value) * sizeof(void *)); } - if((GET_REFS_PTR(arr)[point] = malloc(size)) == NULL) perror("malloc"); + if((GET_REFS_PTR(arr)[point] = my_malloc(size)) == NULL) perror("malloc"); GET_REFS_PTR(arr)[point] ->size = size; * (ObjRef *)GET_REFS_PTR(arr)[point]->data = value; } diff --git a/stackslot.c b/stackslot.c index 8e59ee6..77efcc2 100644 --- a/stackslot.c +++ b/stackslot.c @@ -4,6 +4,7 @@ #include #include #include "objref.c" +#include "heap.h" typedef int Object; @@ -19,7 +20,7 @@ typedef struct { ObjRef getIntObj(int val) { ObjRef intObject; unsigned int objSize = sizeof(ObjRef) + sizeof(int); - if ((intObject = malloc(objSize)) == NULL) { + if ((intObject = my_malloc(objSize)) == NULL) { perror("malloc"); } *(int *) intObject->data = val; @@ -47,7 +48,7 @@ void setValIntObj(ObjRef iref, int val) { StackSlot stackSlotWithObjRef(ObjRef val) { StackSlot *stackSlot; - stackSlot = malloc(sizeof(StackSlot)); + stackSlot = my_malloc(sizeof(StackSlot)); if(stackSlot == NULL) perror("malloc"); stackSlot->isObjRef = true; stackSlot->u.objRef = val; @@ -56,7 +57,7 @@ StackSlot stackSlotWithObjRef(ObjRef val) { StackSlot stackSlotWitchNumber(int val) { StackSlot *stackSlot; - stackSlot = malloc(sizeof(StackSlot)); + stackSlot = my_malloc(sizeof(StackSlot)); if(stackSlot == NULL) perror("malloc"); stackSlot->isObjRef = false; stackSlot->u.number = val; diff --git a/support.c b/support.c index cdd2d80..7a56f51 100644 --- a/support.c +++ b/support.c @@ -1,9 +1,9 @@ - #include "support.h" #include #include #include "objref.c" +#include "heap.h" void fatalError(char *msg){ printf("Fatal error: %s\n", msg); @@ -13,7 +13,7 @@ void fatalError(char *msg){ void * newPrimObject(int dataSize) { ObjRef bigObjRef; - bigObjRef = malloc(sizeof(unsigned int) + + bigObjRef = my_malloc(sizeof(unsigned int) + dataSize * sizeof(unsigned char)); if (bigObjRef == NULL) { fatalError("newPrimObject() got no memory"); diff --git a/support.o b/support.o index e0fc0d2819c5c3289820fa3ee0c860148c04578c..76449c98426e6cdeaa02344dbdbbc9f99928bc63 100644 GIT binary patch delta 764 zcmZ9K&ubG=5Xawp`|E9zO$j2p74%RA12roitf$7JMGA)07DB)Z*`{kK?q;`5tX2i} zq6ZH(ju-JHcvJ9D4;}>dQtCm){tJSo9`w+=IJ5guaA4ld_cO!$y*Yg6z{As}*kY+Q z^(@AN3w6FZc=k)k0zBg5yaQkPxzbZrew=l&T_}rc$ulx}Ske2iigflr`T{;8y{71n z>iq()R&`ruCR>WW$uXv3ehQYfG55WyzEaiw`7D`+589a1EHFkuI*eUkH}r8~KT(a( z;k@pm4JAl;y5JMSOcn-TNx$h zst(!utA@mYEsz?%N%Prt9E=&bXHC>5k|bPg`~AhZ+w+?3cp<3xN#dP}yZxZs?|El~ zl^~3hVA-1v{r=^6IqG>ezg?egRuTpN^}vobQVjjh)yVJqogl&)V6Xgr@;k04&`+RW zLMKa)gYieI7)!4J^9`j(IZW9bwHewrB08x09(03*=vEb?7a~LlQ;4pf5WR~++c1}N z`4+6?KJyAp=D+bPP%a!Q&tppw_eZmk&7qTin<~cW<%;;BTCh}j%~xT>Ig)+CKe^9( A4FCWD delta 708 zcmXw1&ubG=5T5t;*V}BiCD2l~9+X6+MYN$5bL%Q9y+n#A{eehralz0{Hl|caTTm|| zD70}rcoAt2o&*mSdl5wnr5+SL2)*}GJ?KAB)S2Dqz|1$_H($u??A|-F+rM_U5IT^? zl$l}JxjZhOb=H5&JrAFVQBlEfVyrN)$4@gCY~!E|3xBnGT&t7VCbeW`^uM}{pGY0k z>JROGfq@YQWjmucwE8dyU{J5{wowVz^z^l!9?+EI7=AP={y-kUBeqA_+_cP5={C|a zKpU&}DfOI~E$j`vZx7tvA|hS)5kZc7C2j9L;Vaf1@V*jma<5FVwyAMU;{$;?K}CS| zoj?itt1QX{qQ1{n`EphD3hpMTLKn|CVoFi}#ntayBJgErC19g}jcT`Cg%cP$!RbS` z1lpm>>_}O+?7#@K{$+B2J5I$a;sfVgv09sJ&9>S@7os~+oHV1>(D|fZpKaW%)*8{( zB#9TWN0r=0Ena9QaWsz?)t@tO>GzUynDRO$N4g&2&y)eAk3{{B=7)f7cjr=(*C2@( z*DsbY!V+IeOMG#bcu_6!DOut>YiSD~=K`^TFLPhSNnG^y#Vwr9A03<_OBe0;nUG_e WlKH!o0bF5DpFkPc^KWp