Memory management in early systems used single-user contiguous schemes or fixed/dynamic partitions. Fixed partitions had internal fragmentation issues while dynamic partitions led to external fragmentation over time. Relocatable dynamic partitions reduced fragmentation by compacting memory to gather free blocks, but incurred overhead from relocating programs. Compaction merged free blocks, updated address references in relocated programs, and maintained free/busy lists and relocation data.