smalldragon ha scritto:
...
e con una "piccola" modifica potrebbe anche servire per deallocare tutte le variabili presenti nello heap alla fine di una procedura.
Non si e' capito molto quello che vorresti fare.
COMUNQUE, se il problema e' deallocare IN BLOCCO tutta una serie di aree di memoria allocate nello heap all'interno di una funzione, il sistema esiste, ed e' un po' il garbage collector dei poveri.
Si chiama "arena".
Un'arena e' un'area di memoria in cui tu puoi solo ALLOCARE, ma NON deallocare.
La deallocazione viene fatta rilasciando l'intera arena.
L'implementazione e' abbastanza semplice: allochi blocchi di memoria di un certo numero di K (ad esempio 1 MB alla volta), ed allochi lo spazio che ti serve da questo blocco. Quando non c'e' piu' spazio nel blocco, ne allochi un'altro. Ovviamente devi tenere traccia dei blocchi che hai allocato.
Quando devi rilasciare l'arena, rilasci tutti i blocchi.
Ovviamente NON E' LA SOLUZIONE DI TUTTI I MALI: ad esempio NON PUOI chiamare i distruttori degli oggetti allocati nell'arena
devi stare molto attento se vuoi usare LA STESSA ARENA con piu' thread. In generale conviene fare in modo che ogni thrad abbia la propria arena.
In alternativa, esite "bohemgc" (
http://www.hboehm.info/gc) un garbage collector conservativo per il C/C++.