= Unsplittable free-block remainder
An <unsplittable free-block remainder> is the positive suffix left by a proposed allocation that is too small to retain as a valid independent <free list> record. Its size is below the allocator's <minimum free-block size>. The region still contains unused <bytes>, but the chosen representation cannot manage it as a separate free extent. The issue arises because free-region metadata can occupy the regions themselves.<Operating Systems: Three Easy Pieces by Remzi H. Arpaci-Dusseau and others>[Chapter17, §17.2, “Embedding A Free List”, printed pp.6–9]{ref}
Let a chosen block have size $B$, let the proposed allocated extent after header/alignment rounding be $N\le B$, and let the minimum free size be $M$. With remainder $r=B-N$, an allocator that absorbs an undersized suffix uses
$$
S=\begin{cases}
N,&r=0\text{ or }r\ge M,\\
B,&0<r<M.
\end{cases}
$$
This is one possible policy, not a mandatory allocator interface. The absorbed suffix adds $r$ <bytes> of <internal fragmentation> beyond the bookkeeping and rounding already included in $N$.
For an original example, take $B=96$ <bytes>, an8-<byte> allocated header,16-<byte> block granularity and $M=32$ <bytes>. A56-<byte> payload gives $N=16\lceil(56+8)/16\rceil=64$, leaving a representable32-<byte> free block. A57-<byte> payload instead gives $N=80$, leaving an unusable16-<byte> suffix. Absorbing it reserves all96 <bytes>. Increasing the request by just one <byte> has therefore increased this allocation's occupied extent by32 <bytes>.
If $M$ and all extents are multiples of a granularity $q$, a positive absorbed suffix is at most $M-q$ <bytes>. Without that granularity condition, the general integer-byte bound is $M-1$. Choosing another free block or another representation can change the tradeoff. Later <memory block coalescing> can recover adjacent space when allocations are returned, but it does not make an invalid intermediate free record representable.
Back to article page