Avoid full-list scans for C7 v4 and tighten partial reuse

This commit is contained in:
Moe Charm (CI)
2025-12-10 18:04:32 +09:00
parent 860d934d71
commit 7be30c0b5a

View File

@ -97,14 +97,7 @@ static small_page_v4* v4_find_page(small_class_heap_v4* h, const uint8_t* ptr, v
return p;
}
}
prev = NULL;
for (small_page_v4* p = h->full_head; p; prev = p, p = p->next) {
if (v4_ptr_in_page(p, ptr)) {
if (loc) *loc = V4_LOC_FULL;
if (prev_out) *prev_out = prev;
return p;
}
}
// full リストは探さないv4 C7 は partial/current だけで完結する想定)
return NULL;
}
@ -301,8 +294,12 @@ void small_heap_free_fast_v4(small_heap_ctx_v4* ctx, int class_idx, void* ptr) {
h->current = page;
page->next = NULL;
} else if (loc == V4_LOC_FULL && page->freelist) {
// full → partial に戻す
// full → partial に戻すcurrent があっても partial 上限までは復帰)
v4_unlink_from_list(h, loc, prev, page);
v4_page_push_partial(h, page);
if (h->partial_count < V4_MAX_PARTIAL_PAGES) {
v4_page_push_partial(h, page);
} else {
v4_page_push_full(h, page); // 上限超なら戻す
}
}
}