Originariamente inviato da LordSaga640
Salve,

sto facendo un progettino per un esame all'università.

Ho la necessità di creare strutture compatte contenente alcuni dati. Ho lo spazio molto limitato quindi sono costretto a risparmiare di molto. Anche un byte è significativo.

mi spiegate perchè sizeof(long)=4 sizeof(short)=2 sizeof(__int16)=2 sizeof(int)=4
ma:
struct FDATA { // 12 byte
long GAMEID; // 4 byte
short BLOCCOID; //2bute
unsigned int DATA_CREAZIONE; // 4byte
unsigned __int16 DIM; // 2 byte
};

sizeof(struct FDATA)=16?

Ho la necessità che la struttura non superi i 14byte!
Grazie in anticipo
Per risolvere il tuo problema era sufficiente cambiare d'ordine i termini della struttura.

codice:
struct FDATA {
       long GAMEID;
       unsigned int DATA_CREAZIONE; // 4byte
       short BLOCCOID;
       unsigned __int16 DIM;
};
PS: il codice che hai postato creerà non pochi problemi su architetture a 64bit. Se vuoi evitare futuri mal di testa definisci esplicitamente tutte le dimensioni dei campi della struttura. La seguente struttura è compatibile con la tua ma funziona anche a se compilata a 64 bit:

codice:
struct FDATA
{
  int32_t GAMEID;
  uint32_t DATA_CREAZIONE;
  int16_t BLOCCOID;
  uint16_t DIM;
};