/* Resp: A programming language * Copyright (C) 2008-2009 David Robillard * * Resp is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * Resp is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General * Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Resp. If not, see . */ /** @file * @brief Garbage collection shared library interface */ #include "resp.hpp" #include #include #include 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(Object::OBJECT); return mem; } }