4 static const cell free_list_count = 32;
12 return header & 1 == 1;
20 void make_free(cell size)
22 header = (size << 3) | 1;
26 struct block_size_compare {
27 bool operator()(free_heap_block *a, free_heap_block *b)
29 return a->size() < b->size();
33 typedef std::multiset<free_heap_block *, block_size_compare> large_block_set;
36 std::vector<free_heap_block *> small_blocks[free_list_count];
37 large_block_set large_blocks;
38 cell free_block_count;
41 void clear_free_list();
42 void initial_free_list(cell start, cell end, cell occupied);
43 void add_to_free_list(free_heap_block *block);
44 free_heap_block *find_free_block(cell size);
45 free_heap_block *split_free_block(free_heap_block *block, cell size);
46 bool can_allot_p(cell size);
47 cell largest_free_block();