sabato 23 gennaio 2010

C/C++: scoprire quanta memoria occupa una variabile

A volte potrebbe essere utile conoscere la quantità di memoria occupata da una variabile in uno dei nostri programmi C o C++.
La risposta a questa necessità è sizeof, funzione che può essere utilizzata come da esempio:

 #include <stdio.h> 
#include <stdlib.h>

int main()
{
printf("%d\n",sizeof(int));

return 0;
}

In questo modo possiamo sapere quanti byte occupa una qualsiasi variabile di tipo intero sulla nostra macchina: infatti, la dimensione delle variabile è influenzata sia dall'architettura hardware su cui stiamo lavorando che dal sistema operativo che utilizziamo.
Ad esempio, le variabili di tipo "long" occupano 4 byte su architetture a 32 bit, mentre occupano 8 byte se utilizziamo un processore con registri a 64 bit insieme ad un sistema operativo anch'esso a 64 bit (se usiamo un s.o. a 32 bit su un architettura a 64, è come se lavorassimo su un architettura a 32 bit).

La funzione sizeof risulta molto utile anche per allocare memoria dinamica in modo indipendente dalla particolare architettura, quindi per scrivere codice generico. Eccone un esempio:

 #include <stdio.h> 
#include <stdlib.h>

int main()
{
int *p;
p = (int*)malloc(sizeof(int));

return 0;
}

Infatti, la funzione malloc richiede come argomento il numero di byte che la variabile puntata occuperà, spesso senza sizeof non sarebbe possibile allocare in modo corretto memoria dinamica, ad esempio, quando allochiamo spazio per un puntarore ad una struttura dati complessa.

Nessun commento:

Posta un commento