AlleBacco
14-02-2008, 15:38
Sono al 1° anno di ing. informatica e stò facendo un programmino in c++. Il programma funziona perfettamente, però ho notato delle stranezze nella gestione da parte del compilatore della struct che utilizza il programma.
#include <iostream>
using namespace std;
struct prodotto1
{
double prezzo;
char codice[5];
char nome[20];
int quantita;
};
struct prodotto2
{
char codice[5];
char nome[20];
double prezzo;
int quantita;
};
int main()
{
cout<<"Prodotto1: "<<sizeof(prodotto1)<<endl;
cout<<"prodotto2: "<<sizeof(prodotto2)<<endl;
system("pause");
return 0;
}
Le struct prodotto1 e prodotto2 sono concettualmente identiche (correggetemi se sbaglio), anche se le dichiarazioni delle variabili sono in ordine diverso.
Quando eseguo questo programma,a video mi viene stampato questo:
Prodotto1: 40
prodotto2: 48
Come è possibile che le strutture abbiano dimesioni differenti? Inoltre, la somma delle dimesioni delle variabili di ogni struttura dovrebbe essere 37, non 40 o 48.
Questo "scherzo" mi capita con Devcpp, con Visual C++ 2008 Express e con gcc 4.1 a 64 bit, con il gcc 4.1 a 32 bit la dimesione di entrambe le strutture è 40 byte.
#include <iostream>
using namespace std;
struct prodotto1
{
double prezzo;
char codice[5];
char nome[20];
int quantita;
};
struct prodotto2
{
char codice[5];
char nome[20];
double prezzo;
int quantita;
};
int main()
{
cout<<"Prodotto1: "<<sizeof(prodotto1)<<endl;
cout<<"prodotto2: "<<sizeof(prodotto2)<<endl;
system("pause");
return 0;
}
Le struct prodotto1 e prodotto2 sono concettualmente identiche (correggetemi se sbaglio), anche se le dichiarazioni delle variabili sono in ordine diverso.
Quando eseguo questo programma,a video mi viene stampato questo:
Prodotto1: 40
prodotto2: 48
Come è possibile che le strutture abbiano dimesioni differenti? Inoltre, la somma delle dimesioni delle variabili di ogni struttura dovrebbe essere 37, non 40 o 48.
Questo "scherzo" mi capita con Devcpp, con Visual C++ 2008 Express e con gcc 4.1 a 64 bit, con il gcc 4.1 a 32 bit la dimesione di entrambe le strutture è 40 byte.