Newsgroup: it.comp.lang.delphi
Titolo: liberare memoria oggetti

E' una cosa che non ho mai capito, e non mi sembra di averla letto da
nessuna parte, forse viene data per scontata ma...
quando non si libera la memoria allocata da un oggetto,
questa resta bloccata per tutta la durata dell'esecuaione del prg
oppure anche dopo, cioe' fino a quando non spengo il pc? 



da quello che leggo sulla guida in proposito ("Memory management"), il 
gestore di memoria si appoggia direttamente sulle API (VirtualAlloc and 
VirtualFree functions) per allocare e deallocare memoria, perchè più 
performante. Altre ottimizzazioni vengono eseguite a livello di allineamento 
dei blocchi di memoria.
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 ha scritto nel messaggio
news:Xns94AEDBC315...@130.133.1.4...


oppure anche dopo, cioe' fino a quando non spengo il pc? 
Anche dopo, fino al riavvio del S.O.
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/



dipende da come crei l'oggetto, e forse anche dal sistema operativo.
var
  frm: TForm;
begin
  frm := TForm.Create(Application);
in questo caso quando chiudi l'applicazione (Owner di frm) viene liberata
anche la memoria allocata per frm.
var
  frm: TForm;
begin
  frm := TForm.Create(Self);
oppure
var
  frm: TForm;
begin
  frm := TForm.Create(nil);
in questo caso frm non ha owner che si prendo la briga di liberare la
memoria allocata per esso, quindi: 
var
  frm: TForm;
begin
  frm := TForm.Create(nil);
  try
    //usa frm
  finally
    frm.Free;
  end;
nell'ultimo caso le cose possono essere divere a seconda che si usi un S.O.
win9x/me oppure winnt/2000/xp.
nt/2000/xp, quando chiudi l'applicazione dovrebbero avere una specie di
garbage collection che ti libera tutta la memoria allocata
dall'applicazione. 
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
    G.G. Màrquez

 oppure anche dopo, cioe' fino a quando non spengo il pc?
No, la memoria allocata viene sempre liberata, all'uscita dal
programma.

programma.
??? 
non credevo...
Pensavo che il memory leak introdotto non venisse ripulito.
Forse sono ancora troppo legato al c/c++, e penso in termini di memoria
allocata/deallocata. new/delete.
Non sono abituato ai gestori di memoria.
Ad ogni modo, prima di uscire in release, faccio sempre un giro con memcheck
per eliminare tutti i memory leak che ho introdotto.


 Non sono abituato ai gestori di memoria.
*Quale* gestore di memoria ?!

*Quale* gestore di memoria ?!
Vediamo se mi aiuti a capire.
Se in c++ faccio :
   CWaitCursor* pWaitCursor=new CWaitCursor(this); // Alloco l'orologino
Poi, prima di uscire dal programma, scrivo:
   if (pWaitCursor) delete pWaitCursor;
allora sono sicuro di aver liberato la memoria nel modo giusto.
Ma se io non dovessi fare la delete, all'uscita del programma quella parte di
memoria verra' liberata in automatico dal S.O. ??
Siccome le mie ultime esperienze in fatto di programmazione C/C++ risalgono a
OS/2, mi ricordo benissimo che c'era questo problema di memori anon
deallocata.
Vorrei che mi facessi capire questo: tu stai dicendo che posso
(*ipoteticamente*) fare a meno di fare le free di tutti gli oggetti che tanto
ci pensa il S.O. all'uscita del programma?


 ci pensa il S.O. all'uscita del programma?
Sě.  La liberazione della memoria č tanto piů importante quanto piů
sono le operazioni di allocazione/deallocazione *DURANTE* l'esecuzione
del codice.

del codice.
Caspita, non si finisce mai di imparare... Riguardo OS/2 se trovo qualcosa a
riguardo lo pubblico, non ricordo bene come fosse questo discorso della
memoria. 
Grazie dei chiarimenti.
Ciao


 ha scritto nel messaggio
news:lf6g509kq6tu0fpe6...@4ax.com...


 funzionamneto del programma.
Che intendi per "in collaboraziona con il s.o." ?
Quello che dici succede, *anche*, ma non è strettamente necessario.
Vale, ad esempio, per i componenti che prevedono un owner, passando un
valore diverso da nil, in creazione, quando l'owner viene deallocato,
provvede a deallocare tutto ciò che possiede.

 ha scritto nel messaggio
news:c3a04s$24rslg$1...@ID-221370.news.uni-berlin.de...
