diff --git a/src/Collector.cpp b/src/Collector.cpp deleted file mode 100644 index ac1229c..0000000 --- a/src/Collector.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int main() { - std::cout << "i am garbage"; - return 0; -} \ No newline at end of file diff --git a/src/MarkSweep.cpp b/src/MarkSweep.cpp deleted file mode 100644 index ab219d2..0000000 --- a/src/MarkSweep.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#define HEAP_SIZE 65536 // Arbitrary for now, 2^16 -using namespace std; - -/* A simple mark and sweep algorithm */ - -// Shouldn't be exposed. For now, it is -struct ObjectHeader { - size_t size = sizeof(this); - bool marked = false; - -}; - -struct Object : ObjectHeader { - char name; // should be something like id, but for testing sake its char - Object* child; - // Object(char name_) {} - Object(char name_, Object* child_) { - name = name_; - child = child_; - } -}; - -// Representing the heap as a simple struct for now -struct Heap { - Object heap_space[HEAP_SIZE]; -}; - -// For now it assumes that it is given root objects from the start, no root finding included -class MarkSweep { - public: - void mark(Object* obj) { - if (!markedBit(obj)) { - markBit(obj); - Object* ref = obj->child; - if (ref != nullptr) { - mark(ref); - } - } - } - - void sweep(vector worklist) { - for (Object* obj: worklist) { - if (!markedBit(obj) && obj != nullptr) { - delete obj; - } - } - } - - private: - bool markedBit(Object* obj) { - return obj->marked; - } - - void markBit(Object* obj) { - obj->marked = true; - } - -}; - -int main() { - Object* b = new Object('B', nullptr); - // b->name = 'B'; - // b->child = nullptr; - Object* c = new Object('C', b); - // c->name = 'C'; - // c->child = b; // c -> d - Object* d = new Object('D', nullptr); - // d->name = 'D'; - // d->child = nullptr; - - //Heap* heap = new Heap{*c, *b, *d}; - vector worklist = {c, b, d}; - MarkSweep* gc = new MarkSweep(); - - gc->mark(c); - cout << "Expected 1, got: " << b->marked << '\n'; - cout << "Expected 1, got: " << c->marked << '\n'; - cout << "Expected 0, got: " << d->marked << '\n'; - - gc->sweep(worklist); - cout << b->name << '\n'; - cout << c->name << '\n'; - cout << d->name << '\n'; // The object at d is now deleted (freed) - return 0; -} \ No newline at end of file