PDA

View Full Version : [C++] Managgia il GC non c'e' !!


Bonfo
03-12-2006, 21:28
Bene...
... ho iniziato a programmare in C++.

Purtroppo non lo consco molto bene e mi ci sto facendo le ossa adesso.
Venendo da Java e C# mi sono completamente scordato che il GarbageCollector non c'e' :doh: :doh:

Ora la mia applicazione crasha, sicurmante non per errori di programmazione come Null pointer, ma quasi sicuramente perche' esagero un po' troppo con l'uso della memoria.

Il problma mi si e' posto solo ora che sono quasi al termine del mio progetto, e quindi con almeno una 50 di classi :(

Ora le domande seguano a ruota:
- come funzia la delete, ovvero in tutti i suoi aspetti e sottoaspetti (cosi' forse mi evito di riguardarmi tutte e 50 le classi)
- quanta memoria puo' usare un programma ( da quel che so io ho tutti gli indirizzi virtuali ... quindi su AI32 circa 4 Giga.... ma mi sa che gia' a 18 MB mi molla )
- Strumenti per il profiling un po' mgliori del Task Manager di windows ?? (Ovviamente se Free e' mooooooolto meglio :D)

Grazie a tutti :help:

P.S.: in piu' sto usando le wxWidgets, che mi sa che usano un loro sistema di "deleting", quindi se qualcuno sa pure questo ... gli voglio bene :flower:

vizzz
03-12-2006, 22:45
l'unica cosa che devi fare è controllare che ad ogni new corrisponda la sua delete.
se in una classe nel costruttore allochi qualcosa nel distruttore ricordati di distruggerla.
programmi sotto linux o win? ricordo una libreria ibm per linux che implementava un garbage collector per c++

Bonfo
03-12-2006, 23:38
grazie...
.. ora opero una bella ricerca in tutto il codice ;)

tomminno
04-12-2006, 15:47
Difficile che il programma vada in crash solo perchè non deallochi la memoria (non penso tu saturi la quantità di memoria occupabile da un processo).
Più facile che cerchi di scrivere su aree di memoria non allocate o altro.
Hai possibilità di lanciare il programma in debug per capire dove va in crash?

71104
04-12-2006, 16:29
hai la possibilità di utilizzare gcnew?

ti salverebbe la vita perché a quel punto sarebbe questione di Find-Replace :D

cionci
04-12-2006, 17:58
Una cosa molto importante da tenere in considerazione in C++ è che quando si alloca memoria con la new in una classe si dovrebbe, ai limiti del possibile, fare in modo che sia la classe stessa deallocare la memoria...