Newsgroup: it.comp.lang.c++
Titolo: Quanta memoria libera una delete?

Salve a tutti, qualcuno sa dirmi se c'e' un modo di sapere quanta memoria ha
liberato una delete dopo averla chiamata?
Grazie a tutti
--
Francesco Iorio
Prograph Research
fr...@prograph.it

 wrote in message
news:89dt6g$54s$1...@pinco.nettuno.it...


 liberato una delete dopo averla chiamata?
Purtroppo, non in C++ standard.
Alex

 Comunque la delete di per sč non restituisce niente.
Non e` detto che sia cosi` semplice, a seconda di cosa si
intende con la domanda di cui al subject.  Ad esempio...:
struct pippo {
    std::vector<char> pluto;
};
pippo* pp = new pippo;    // alloca, diciamo, 16 byte
pp->pluto.resize(100000);  // ne alloca altri 100000
delete pp;    // ne libera 100016...
Alex

 > Comunque la delete di per sè non restituisce niente.


liberato una delete dopo averla chiamata?
Basta sapere quanta ne hai allocata...
Il Ghenio
-----
James: Adesso so finalmente cosa provano i panni messi in lavatrice!
Jesse: Avremo bisogno di un candeggio!!
(Team Rocket)
-----

 delete pp;    // ne libera 100016...
Esatto, il mio problema e' sapere quanta memoria ho deallocato in una
situazione del genere :
char *p = new char[100];
delete p;
E' ovvio che sizeof(char) =  sizeof(p) = 1, per cui anche sapendo che sto
deallocando un char non e' detto che
sto per liberare un byte (soprattutto con i pragma aligment del compilatore)
Senti, tu hai detto che non c'e' un metodo in c++ standard... E in NON C++
standard ? Esiste ?
Davide Pirola @ Prograph Research
www.prograph.it
www.protonic.net

 standard ? Esiste ?
Alcuni ambienti ti permettono di sapere quanto e` grosso un
blocco di memoria allocata (tipicamente con un arrotondamento,
ad esempio at 16 byte superiori).  Ad esempio, HeapSize nelle
API di Win32 (discussione in it.comp.programmare.win32, pls).
Alex

 > standard ? Esiste ?
Si potrebbe provare utilizzando degli smart pointers.
Fausto

 API di Win32 (discussione in it.comp.programmare.win32, pls).
Hm... Ok... Allora non interessa neanche a me.
--


posso fare sizeof(p) e sapere quanta mem sto deallocando
Non credo... sizeof(p) ti restituisce la dimensione del puntatore,
inoltre tieni presente che e` una espressione valutata a compile time
e questo significa che se hai
Base* p;
p = new Derived;
sizeof(*p) ti restituisce sizeof(Base).
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

 sizeof(*p) ti restituisce sizeof(Base).
Infatti questo mi va bene, peche' so che deallocando Base tolgo in effetti
sizeof(Base),
quello che non so, il caso che non riesco a trappare, e' il
delete [] p;
Perche' [] non so quanti elementi sono...

 sizeof(Base),
Non e` cosi` se Base ha un distruttore virtuale: in questo
caso, liberi sizeof(Derived) >= sizeof(Base) byte.
Alex

Perche' [] non so quanti elementi sono...
Come gia` suggerito da altri, potresti provare con gli
smart pointer, ma cosi` su due piedi non saprei dire fino
a che punto si possa realizzare un meccanismo
sufficientemente automatizzato da evitare brutte
sorprese.


 liberato una delete dopo averla chiamata?
Metodo barbaro: calcolare il sizeof dell'oggetto che elimini....
Se poi hai una struttura con più elementi devi moltiplicare quel valore per
il numero.
Non mi risulta che delete restituisca qualcosa o vada a inserire qualche
valore di servizio, così come non credo che possano esistere (e dunque
ridefinire) degli handler.
--
| /
| \Byte - Andrea Briganti
E-Mail 
kbyt...@freemail.it
ICQ 40872731

No, non esiste, perche' anche se con l'operatore sizeof puoi ricostruire
la quantita' di memoria occupata da una struttura dati, non hai modo di
sapere che peso hanno eventuali strutture dati utilizzate
dall'allocatore di memoria internamente.
Bisogna poi intendersi su cosa significa "liberare memoria": in generale
la memoria "liberata" da delete torna a disposizione dell'applicazione,
ma per il sistema operativo e' sempre occupata.
Ciao,
Nicola