FA-90469 / Garbage collector invariants / Member archive
Free-list sweep: split block keeps the allocated address · case 04
The next allocation is handed the same address again.
Case contract
blocks are [address, size, marked] covering the heap in any order. Sweep in address order: unmarked blocks become free and physically adjacent free blocks coalesce. Then serve requests first-fit in address order: round the request up to 8 bytes; split the chosen block when the remainder is at least 16 bytes (the allocation takes the low end), otherwise hand out the whole block; no fit yields None. Return the swept free list (as it was right after sweeping), the allocation addresses and the final free list.
Why this case matters
Sweepers and free-list allocators must keep block boundaries exact or they hand out overlapping memory.
One recorded failure
Sample boundary fixtureThis sample comes from the broken implementation of a controlled reproducer.
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: sweep, split and exhaust | {"alloc": [4112, 4112, 4168, 4168, null], "free": [], "swept": [[4112, 48], [4168, 64]]} | {"alloc": [4112, 4136, 4168, 4208, null], "free": [], "swept": [[4112, 48], [4168, 64]]} | Failed |
MEMBER ARCHIVE
The complete case is available to members.
This record includes three runnable implementations, regression fixtures, execution results, and source hashes.
Member access is invitation-based. Sign in with your invited account to inspect the sources.
Sign in to the archive ↗