# marCsweep A mark-and-sweep garbage collector written in C. Includes a simple virtual machine and a custom `malloc` implementation for creating, tracing, and freeing garbage. ## Building Compiling the project should be relatively easy, even if you aren't familiar with `make`. Dependencies: `git`, `make`, and `gcc`. ``` git clone https://codeberg.org/andyscott/marCsweep.git cd marCsweep make release # or debug ``` That's it! Make will create the `bin` directory and place the finished executable there. Compiling with `clang` is also supported, just replace "gcc" with "clang" in the first line of the `Makefile`. Also note that if you don't specify a target for make (i.e. "release" or "debug") both will be built. Debug builds are placed in the `debug` directory. ## Running Once compiled, the program can be run with the following: ``` cd bin # or debug ./gc ``` The results of the test cases will be output to your terminal: > 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. 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?