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);
18 cell next_allocated_object_after(cell scan) {
19 while (scan != this->end && ((object*)scan)->free_p()) {
20 free_heap_block* free_block = (free_heap_block*)scan;
21 scan = (cell)free_block + free_block->size();
23 return scan == this->end ? 0 : scan;
27 return next_allocated_object_after(this->start);
30 cell next_object_after(cell scan) {
31 cell size = ((object*)scan)->size();
32 return next_allocated_object_after(scan + size);
36 free_list_allocator<object>::sweep();
37 starts.update_for_sweep(&this->state);