Próbuję użyć pól bitowych w C++, aby osiągnąć konkretny rozmiar klasy, ale z jakiegoś powodu jest większy niż się spodziewałem.Niewłaściwie ustawione atrybuty za pomocą pól bitowych w klasie C++
Problem polega na tym, że zgłaszana jest klasa o 32 bitach (4 bajty) (przekazana jako argument do sizeof
) 5 bajtów. Przykład klasy poniżej:
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));
Jeżeli położenie four_bit_field
i eight_bit_field
są przełączane sizeof
przywrócić prawidłową wielkość, 4 bajtów. Uważam, że jest to problem z przyporządkowaniem pamięci.
Ktoś zna przyczynę tego zachowania? I, co najważniejsze, jak mogę to naprawić, bez przełączania żadnych pozycji.
To co myślałem, kiedy powiedziałem, jest to problem ułożeniu pamięci. Ale szukam rozwiązania tego problemu. – braunmagrin
@braunmagrin, byłem zajęty testowaniem rozwiązania, zobacz moją edycję. –
Przepraszam za pośpiech. Dzięki, że rozwiązany. – braunmagrin