63 FreelistHead initial_head, empty_freelist;
66 if (initial_head.length() < threshold) {
72 !
freelist_head_.compare_exchange_strong(initial_head, empty_freelist));
81 std::sort(freelist_entries.begin(), freelist_entries.end());
88 std::vector<uint32_t> new_freelist_entries;
89 for (
size_t i = 0;
i < freelist_entries.size();
i++) {
90 uint32_t entry = freelist_entries[
i];
91 Segment segment = Segment::Containing(entry);
93 if (segment.first_entry() == entry &&
96 if (segment.last_entry() == last_entry) {
105 new_freelist_entries.push_back(entry);
108 DCHECK_LE(new_freelist_entries.size(), freelist_entries.size());
109 DCHECK(
IsAligned(freelist_entries.size() - new_freelist_entries.size(),
112 if (new_freelist_entries.empty()) {
118 uint32_t last_element = new_freelist_entries.back();