View Full Version : [C++]
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è?
vengono inseriti dei byte aggiuntivi per far sì che i campi siano allineati in memoria (l'accesso risulta solitamente più veloce)
Quindi avrò solo multipli di 4...non posso fare una struttura di 3 byte in pratica...
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
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??
Grazie ragazzi, sempre tempestivi e precisi....Mi siete stati di grande aiuto
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.