From 71cb844f7d7cc6406c66a580fdb37f8c6e36d171 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 3 Jul 2009 06:52:51 +0000 Subject: Include and use TLSF fast realtime allocator. git-svn-id: http://svn.drobilla.net/resp/tuplr@171 ad02d1e2-f140-0410-9f75-f8b11f17cedd --- src/gc.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/gc.cpp') diff --git a/src/gc.cpp b/src/gc.cpp index e76bb2c..7550893 100644 --- a/src/gc.cpp +++ b/src/gc.cpp @@ -23,15 +23,26 @@ #include #include #include "tuplr.hpp" +#include "tlsf.h" using namespace std; +GC::GC(size_t pool_size) +{ + _pool = tlsf_init(malloc(pool_size), pool_size); +} + +GC::~GC() +{ + tlsf_destroy((tlsf_t*)_pool); +} + void* GC::alloc(size_t size, GC::Tag tag) { size += (4 - (size % 4)); // Align to 32-bits size += sizeof(Object::Header); - void* ret = malloc(size); + void* ret = tlsf_malloc((tlsf_t*)_pool, size); ((Object::Header*)ret)->mark = 0; ((Object::Header*)ret)->tag = tag; ret = (char*)ret + sizeof(Object::Header); @@ -76,14 +87,14 @@ GC::collect(const Roots& roots) } else { switch ((*i)->tag()) { case GC::TAG_FRAME: - free((char*)(*i) - sizeof(Object::Header)); + tlsf_free((tlsf_t*)_pool, (char*)(*i) - sizeof(Object::Header)); _heap.erase(i); break; case GC::TAG_AST: AST* ast = (AST*)*i; if (!ast->to()) { // FIXME (ast)->~AST(); - free((char*)(*i) - sizeof(Object::Header)); + tlsf_free((tlsf_t*)_pool, ((char*)(*i) - sizeof(Object::Header))); _heap.erase(i); } break; -- cgit v1.2.1