4 struct tenured_space : free_list_allocator<object> {
5 object_start_map starts;
6 std::vector<object *> mark_stack;
8 explicit tenured_space(cell size, cell start) :
9 free_list_allocator<object>(size,start), starts(size,start) {}
11 object *allot(cell size)
13 object *obj = free_list_allocator<object>::allot(size);
16 starts.record_object_start_offset(obj);
23 object *first_allocated_block_after(object *block)
25 while(block != this->last_block() && block->free_p())
27 free_heap_block *free_block = (free_heap_block *)block;
28 block = (object *)((cell)free_block + free_block->size());
31 if(block == this->last_block())
39 return (cell)first_allocated_block_after(this->first_block());
42 cell next_object_after(cell scan)
44 cell size = ((object *)scan)->size();
45 object *next = (object *)(scan + size);
46 return (cell)first_allocated_block_after(next);
49 void clear_mark_bits()
51 state.clear_mark_bits();
54 void clear_mark_stack()
59 bool marked_p(object *obj)
61 return this->state.marked_p(obj);
64 void mark_and_push(object *obj)
66 this->state.set_marked_p(obj);
67 this->mark_stack.push_back(obj);