PDA

View Full Version : [C++]


tidus8
23-01-2007, 11:16
Ciao ragazzi, ho una domanda da farvi.
Sto usando una struttura nel mio codice C++ che ha all'interno uno short int (2 byte) e un char (1 byte). Perchè quando vado a fare sizeof(miaStruttura) mi dice che occupa 4 byte? Addirittura se metto int (4 byte) al posto di short, mi dice che la struttura occupa 8 byte....Sapete dirmi perchè?

pela
23-01-2007, 11:22
vengono inseriti dei byte aggiuntivi per far sì che i campi siano allineati in memoria (l'accesso risulta solitamente più veloce)

tidus8
23-01-2007, 12:05
Quindi avrò solo multipli di 4...non posso fare una struttura di 3 byte in pratica...

andbin
23-01-2007, 12:46
Quindi avrò solo multipli di 4...non posso fare una struttura di 3 byte in pratica...Sì che si può, basta indicare al compilatore di usare un altro tipo di allineamento.

#pragma pack(1)

typedef struct
{
short a;
char b;
} MIASTRUCT;

#pragma pack()Ora sizeof(MIASTRUCT) dà 3.

Notare che le direttive pragma sono specifiche per ogni compilatore, quindi non tutti i compilatori potrebbero avere il pragma pack (sebbene molti ce l'hanno).

sottovento
23-01-2007, 13:08
Sì che si può, basta indicare al compilatore di usare un altro tipo di allineamento.
[
A patto, ovviamente, che tutto questo sia supportato ad un livello piu' basso.
Non esiste alcun problema, per i processori Intel, far iniziare una word ad una locazione di memoria che sia dispari, ma non e' cosi' per tutti.
In tal caso non puoi cambiare lo stile di allineamento

andbin
23-01-2007, 13:19
A patto, ovviamente, che tutto questo sia supportato ad un livello piu' basso.Certo ... e che il compilatore abbia una direttiva pragma pack o similare/equivalente.
Ma sono questioni che dipendono da cosa si sta usando ... e quindi è da verificare, non posso conoscere tutti i processori/compilatori su questa terra. ;)

ma non e' cosi' per tutti.Giusto solo per mia curiosità personale: su quali architetture di processori non è possibile "disallineare" i dati??

tidus8
23-01-2007, 17:41
Grazie ragazzi, sempre tempestivi e precisi....Mi siete stati di grande aiuto

vizzz
23-01-2007, 19:06
Giusto solo per mia curiosità personale: su quali architetture di processori non è possibile "disallineare" i dati??
mi sono scontrato proprio oggi con un problema analogo in cui era necessario disallineamento con un paio di struct...piattaforma arm7