[C++] Consumo di memoria effettivo di una classe

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Krdan
Prode Principiante
Messaggi: 38
Iscrizione: giovedì 1 marzo 2007, 14:42

[C++] Consumo di memoria effettivo di una classe

Messaggio da Krdan »

Il mio quesito è questo, che funzione devo usare per farmi dire quanti byte sono effettivamente allocati da un elemento di una data classe?
Esempio:

Codice: Seleziona tutto

#include <cstdlib>
#include <iostream>
#include <cstring>

using namespace std;

class alfa{
	char* v;
public:
	alfa(char* str, int d){
		v=new char[d];
		strcpy(v,str);
	}
};

int main(){
	char* v;
	char b[]="Palla";
	v=new char[6];
	strcpy(v,b);
	alfa a(v,6);
	cout<<sizeof(a)<<endl;
	return 0;
}
Quando chiamo il sizeof mi da dimensione 4, perché effettivamente è il consumo di memoria del puntatore a carattere a tempo di compilazione, ma all'atto pratico l'elemento a occupa 10 byte (4 di puntatore + 6 caratteri).
C'è una funzione nelle librerie standard che mi dia il consumo effettivo al momento in cui viene chiamata e non a tempo di compilazione?
Avatar utente
jack84
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 493
Iscrizione: lunedì 12 febbraio 2007, 11:13

Re: [C++] Consumo di memoria effettivo di una classe

Messaggio da jack84 »

Provo a suggerirti una prova, non sò se effettivamente sia giusto, potresti scrivere sizeof (*a), in questo modo dovrebbe valutare non la dimensione del puntatore ma la zona puntata cioè la tua struttura.
Non sempre si può prevedere, ma ci si può sempre preparare
Avatar utente
Uno
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 412
Iscrizione: sabato 3 marzo 2007, 21:47
Contatti:

Re: [C++] Consumo di memoria effettivo di una classe

Messaggio da Uno »

Krdan ha scritto: Quando chiamo il sizeof mi da dimensione 4, perché effettivamente è il consumo di memoria del puntatore a carattere a tempo di compilazione, ma all'atto pratico l'elemento a occupa 10 byte (4 di puntatore + 6 caratteri).
C'è una funzione nelle librerie standard che mi dia il consumo effettivo al momento in cui viene chiamata e non a tempo di compilazione?
Ma... in generale se hai un puntatore non puoi sapere quanta memoria è allocata (se è allocata) in quel punto a meno di averne tenuto traccia tu stesso o di sapere in che forma è allocata, ad esempio una stringa di caratteri terminata da NULL, sicuramente la libreria standard C di GNU memorizzerà da qualche parte quanta memoria alloca ad ogni chiamata di malloc è fornirà qualche strumento per il debugging che permetterà di ricavarla... non so dirti di più.
porco diodo...
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 2 ospiti