Memory compaction (source code)

= Memory compaction

<Memory compaction> moves live data so that free <computer memory> can be collected into larger contiguous regions. It changes data placement, while <memory block coalescing> combines intervals that are already free and adjacent. Compaction therefore needs a way to preserve the meaning of references to moved data. An ordinary allocator cannot freely move an arbitrary live <C programming language> allocation behind unchanged raw <pointers>.<Operating Systems: Three Easy Pieces by Remzi H. Arpaci-Dusseau and others>[Chapter17, §17.1, live-allocation nonrelocation assumption and compaction discussion, printed pp.2–3]{ref}

Consider the104-<byte> pool with free blocks of24,40 and16 <bytes>, separated by live blocks of16 and8 <bytes>. Its total free capacity is80 <bytes>, but its <largest free memory block> is40 <bytes>. If both live blocks are movable, placing the16-<byte> object at offset0 and the8-<byte> object at offset16 creates one free80-<byte> interval from24 to104. No additional capacity is created; its contiguity improves.

The references must follow each <movable memory object>. A reference to offset24 in the original first object becomes offset0; a reference five <bytes> inside that object changes from29 to5. A <garbage collection> system with accurate reference information or another suitable level of indirection can arrange such updates. Blindly replacing every integer equal to an old address would corrupt unrelated data.

Physical-page compaction is a different allocation-layer application. An <operating system> can move eligible pages while preserving a process's <virtual memory> addresses through updated mappings. Linux's documented compaction mechanism seeks contiguous free physical blocks, including for large-page allocation; moving pages also has execution costs and can affect latency.<Documentation for proc sys vm in the Linux kernel documentation>[Linux v6.12 documentation, compact_memory and compaction_proactiveness sections]{ref} Such physical rearrangement does not automatically combine separated virtual heap holes. The address space, movable objects and reference-preservation mechanism must accompany a compaction claim.