3 struct tenured_space : free_list_allocator<object> {
4 object_start_map starts;
6 tenured_space(cell size, cell start)
7 : free_list_allocator<object>(size, start), starts(size, start) {}
9 object* allot(cell size) {
10 object* obj = free_list_allocator<object>::allot(size);
12 starts.record_object_start_offset(obj);
19 return (cell)next_allocated_block_after((object*)this->start);
22 cell next_object_after(cell scan) {
23 cell size = ((object*)scan)->size();
24 object* next = (object*)(scan + size);
25 return (cell)next_allocated_block_after(next);
28 bool marked_p(object* obj) {
29 return this->state.marked_p((cell)obj);
32 void set_marked_p(object* obj) {
33 this->state.set_marked_p((cell)obj, obj->size());
37 free_list_allocator<object>::sweep();
38 starts.update_for_sweep(&this->state);