Newsgroup: it.comp.lang.c++
Titolo: Dimensioni di oggetti

Salve,
nesimo problema da niubbo del C++ (prometto che prima o poi mi metto a
studiarlo serissimamente).
Avrei bisogno di tenere conto dell'occupazione effettiva di memoria di
alcune classi di cui non dispongo dei sorgenti.
Per fare un esempio, avrei bisogno di sapere quanta memoria effettivamente
una string o il vector usano quando scrivo qualcosa del tipo:
string c;
string c = "trallallero\n";
o qualcosa come
vector<int> v;
v.push_back(15);
v.push_back(34);
Esiste un sistema semplice per farlo?
A me viene in mente di ridefinire l'operatore new in modo che tenga conto di
quanta memoria gli viene richiesta, però non saprei se funziona, né come
fare a ridefinirlo solo per le 2 classi in questione in modo che la nuova
versione si comporti in maniera "trasparente" ed identica alla vecchia.
Lanugo

alcune classi di cui non dispongo dei sorgenti.
sizeof non ti va bene ?

 Esiste un sistema semplice per farlo?
v.size() o v.capacity() a seconda di quello che intendi.
ti consiglio di metterti a studiarlo seriamente: questo newsgroup non
e' adatto per tutorials sulla stl...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.

Grazie!
Lanugo


No, non gli va bene perche' le classi suddette usano memoria dinamica,
che non viene conteggiata.
Ciao,
Nicola

Tieni conto che size e capacity ti indicano quanti elementi contiene il
container o per quanti ha gia' spazio a disposizione. Non ti indicano lo
spazio di memoria effettivo, che potrebbe contenenere campi di servizio.
Ciao,
Nicola

 e' adatto per tutorials sulla stl...
Non credo che sia cosě semplice. Almeno non per tutti i container. Per esempio
nel caso di una list devi tenere conto:
1) della dimensione della classe list in se
2) della dimensione dell'allocator se per caso e' allocato dinamicamente
3) della dimensione di ciascun elemento contenuto
4) della dimensione di ciascun nodo (ogni nodo contiene a sua volta un elemento)
5) dell'esistenza o meno di un nodo extra allocato dinamicamente come "radice"
della lista.
E questi sono solo le cose che mi sono venute in mente "di botta".
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

spazio di memoria effettivo, che potrebbe contenenere campi di servizio.
Già, infatti. Dopo alcune prove ho visto che il conteggio non è molto
preciso. C'è un sistema per tenere conto di proprio tutto?
Lanugo

"Lanugo of the wandering souls" <lan...@SCEMOCHISPAMMAflashmail.com> wrote in
message news:p9Iq6.117102$wA6.5...@e420r-sjo3.usenetserver.com...

L'unico sistema portabile e' avere i sorgenti e controllare cosa fanno! Un
sistema specifico di una piattaforma potrebbe esistere: per esempio una serie di
funzioni che ti danno accesso alla dimensione dell'heap.


Oppure ridefinire new e delete e tener conto della memoria allocata. Non
e' detto che tu riesca a farlo per gli elementi della libreria. Se l'STL
e' implementato bene e' possibile scrivere un Allocatore da passare come
argomento del template e questo potrebbe "contare" la memoria allocata.
Ciao,
Nicola

 wrote in message
news:3AAC928F...@divalsim.it...

Salvo che ridefinendo new/delete difficilmente riesci a capire quale specifica
istanza di un dato container sta allocando (e non tieni conto dello spazio del
container se istanziato come automatico).
Ridefinendo allocator risolvi in parte il problema, ma non riesci a tenere conto
di memoria allocata dinamicamente dagli oggetti contenuti e di quella che fa
parte del container stesso.


funzioni che ti danno accesso alla dimensione dell'heap.
Già. Non si può fare qualcosa del tipo obbligare l'oggetto ad usare una new
che fornisco io, in modo tale da vedere quanta roba alloca? Non so,
probabilmente è una stupidaggine. Ma nessuno ha mai avuto bisogno di sapere
con precisione quanto ram mangia il proprio programma che usa le STL?
Capisco che l'occupazione di risorse, così come la velocità, siano l'ultima
cosa a cui pensare quando si scrive un programma, però in alcuni casi è
davvero utile saperlo.
Hmm, forse ci si può appoggiare a qualche programma esterno.
Lanugo

 Hmm, forse ci si può appoggiare a qualche programma esterno.
Dipende da cosa vuoi misurare. Lo spazio occupato direttamente dal container e'
una cosa. Poi c'e' lo spazio che il container alloca per ogni oggetto, e questa
e' un'altra cosa e la puoi controllare con l'allocator del container
fornendogliene uno tu. Poi c'e' la memoria eventualmente allocata dal tuo
oggetto, e questa la devi proprio controllare tu!
--


oggetto, e questa la devi proprio controllare tu!
Questo è davvero facile, è tutto codice mio :-)
Lanugo

 Questo è davvero facile, è tutto codice mio :-)
Si, sempre vedi punto 1
