factor/vm/bump_allocator.hpp

39 lines
886 B
C++

namespace factor {
struct bump_allocator {
// offset of 'here' and 'end' is hardcoded in compiler backends
cell here;
cell start;
cell end;
cell size;
bump_allocator(cell size, cell start)
: here(start), start(start), end(start + size), size(size) {}
bool contains_p(object* obj) {
return (cell)obj >= start && (cell)obj < end;
}
object* allot(cell size) {
cell h = here;
here = h + align(size, data_alignment);
return (object*)h;
}
cell occupied_space() { return here - start; }
cell free_space() { return end - here; }
void flush() {
here = start;
#ifdef FACTOR_DEBUG
// In case of bugs, there may be bogus references pointing to the
// memory space after the gc has run. Filling it with a pattern
// makes accesses to such shadow data fail hard.
memset_cell((void*)start, 0xbaadbaad, size);
#endif
}
};
}