problema di memoria con le stringhe

il problema riguarda la allocazione di memoria nello heap (la parte di memoria utilizzata per allocare variabili e passare argomenti nelle funzioni).
Quando allochi memoria (p.es. 4 byte di un float) e poi la deallochi con free, i 4 byte costituiscono un "buco" nello heap teoricamente libero ma in pratica non riallocabile per mancanza di un garbage collector che gestisca i puntatori (che consumano molta memoria per allocazioni di piccole dimensioni!) alle aree di memorie liberate e che di tanto in tanto deframmenti la memoria in maniera simile al defrag di windows.
questo comporta che i "buchi" sono lasciati inutilizzati (in realtà sino a quando non si libera tutta la memoria allocata successivamente, evento raro ) e non disponibili. Dopo un po la memoria si esaurisce.
Sarebbe necessario quindi gestire internamente al programma una allocazione iniziale di un pool di memoria e/o una gestione di una malloc/free custom. Spesso non ne vale la pena, ma a volte è indispensabile. Per esempio se devi gestire delle code come liste puntate in cui si creano/distruggono spesso elementi. Io per esempio gestisco così le code di messaggi. Ho infatti visto librerie che usano creare/distruggere oggetti come istanze di una classe, con il risultato che la memoria si satura molto velocemente.