Entra

View Full Version : [C++] Dimensione struttura e gestione memoria


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.

Unrue
14-02-2008, 15:55
Credo che la risposta sia qua:

http://www.delorie.com/djgpp/v2faq/faq22_11.html

AlleBacco
14-02-2008, 16:08
Grazie per le risposte! D'ora in poi userò un occhio di riguardo in più quando creerò una struttura!

Ufo13
14-02-2008, 23:57
Detto in parole poverissime:
la struct viene sempre allineata secondo il primo membro (in questo caso il double).