compaction/coalescing, whatever.... Back in the 1990s, I used a compiler that did not defragment its internal free list. It's algorithm for managing memory ensured that no matter how well the application ensured things were deallocated, the free list would get longer and longer and more and more fragmented, and allocations would get slower and slower until there was no memeory left. When we complained to the vendor, they sent us a package containing nothing but two pragmas. By withing that package into our main program, we caused the linker to use malloc and free instead of the vendor's run-time manager. Result: thread-safe, efficient, reliable, RM-compliant memory management! So why on earth did they do what they did in the first place?