How do you prevent memory fragmentation when managing dynamic memory in resource-constrained embedded environments?