Sto cercando di utilizzare campi di bit in C++ per ottenere una dimensione di classe specifica, ma per qualche motivo è più grande di quanto mi aspettassi.Attributi disallineati usando campi di bit in classe C++
Il problema è che una classe con 32 bit (4 byte) sta segnalando (quando è passata come argomento a sizeof
) 5 byte. Esempio classe sotto:
typedef unsigned char u8;
typedef unsigned int u32;
class Test {
u8 four_bit_field : 4;
u8 eight_bit_field;
u32 twenty_bit_field : 20;
}__attribute__((packed));
Se le four_bit_field
e eight_bit_field
posizioni sono commutati, sizeof
ritorno delle dimensioni appropriate, 4 byte. Credo che sia probabilmente un problema di allineamento della memoria.
Quindi qualcuno conosce il motivo di questo comportamento? E, soprattutto, come posso risolvere questo, senza cambiare alcuna posizione.
Questo è quello che ho pensato quando ho detto che questo è un problema allineamento di memoria. Ma sto cercando una soluzione a questo problema. – braunmagrin
@braunmagrin, ero impegnato a testare la soluzione, vedere la mia modifica. –
Mi dispiace per la fretta. Grazie, ha risolto. – braunmagrin