# marCsweep A mark-and-sweep garbage collector with a simple virtual machine to perform allocations. ## Building Compiling the project should be relatively easy, even if you aren't familiar with `make`. Dependencies: `git`, `make`, and `gcc`. Compiling with `clang` is also possible, simply replace "gcc" with "clang" in the first line of the Makefile. ``` git clone https://codeberg.org/andyscott/marCsweep.git cd marCsweep make release ``` That's it! The Makefile will automatically create the build directory and place the compiled executable there. ## Running Once compiled, the program can be run with the following: ``` cd build # or debug ./gc ``` By default the program will output the results of the test cases: > test_int_alloc: PASS test_pair_alloc: PASS test_obj_count: PASS test_pair_alloc: PASS test_unreachable: PASS test_auto_gc: PASS If all six tests pass, then the library compiles correctly on your system and should be ready for experimentation! ## Notes This is a personal project that I am writing in my free time to learn more about garbage collection. Thank you to [Robert Nystrom](https://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/) for the idea. ### Malloc Sadly, it was this author's idea to extend the project by writing a custom `malloc`. Perhaps I should have been lazy and used the preexisting definitions, but where's the fun in that? You can find the code on the [malloc](https://codeberg.org/andyscott/marCsweep/src/branch/malloc) branch, but be aware that it's still highly experimental!