aboutsummaryrefslogtreecommitdiffstats
path: root/src/gc.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-12-05 01:50:17 +0000
committerDavid Robillard <d@drobilla.net>2010-12-05 01:50:17 +0000
commitdd85fe8106ff2315c8ae46cba4f4ae81560da178 (patch)
tree27589e02e6efb7971e2680ca9d0d01ae435fce11 /src/gc.cpp
parent9eb1adc5d8a624ac694bc84720e2d5479cc91bbb (diff)
downloadresp-dd85fe8106ff2315c8ae46cba4f4ae81560da178.tar.gz
resp-dd85fe8106ff2315c8ae46cba4f4ae81560da178.tar.bz2
resp-dd85fe8106ff2315c8ae46cba4f4ae81560da178.zip
Move resp_gc.cpp contents into gc.cpp.
git-svn-id: http://svn.drobilla.net/resp/resp@302 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'src/gc.cpp')
-rw-r--r--src/gc.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/gc.cpp b/src/gc.cpp
index cff4f0a..7dd0d15 100644
--- a/src/gc.cpp
+++ b/src/gc.cpp
@@ -20,8 +20,13 @@
*/
#include <cassert>
-#include <set>
#include <iostream>
+#include <set>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
#include "resp.hpp"
#include "tlsf.h"
@@ -92,3 +97,26 @@ GC::collect(const Roots& roots)
//std::cerr << "[GC] Collect " << oldSize << " => " << _heap.size() << endl;
}
+
+extern "C" {
+
+void*
+resp_gc_allocate(unsigned size)
+{
+ static const size_t COLLECT_SIZE = 8 * 1024 * 1024; // 8 MiB
+
+ static size_t allocated = 0;
+ allocated += size;
+ if (allocated > COLLECT_SIZE) {
+ Object::pool.collect(Object::pool.roots());
+ allocated = 0;
+ }
+
+ void* mem = Object::pool.alloc(size);
+ Object* obj = new (mem) Object();
+ obj->tag(T_UNKNOWN);
+
+ return mem;
+}
+
+}