Tôi đang cố gắng sử dụng các trường bit trong C++ để đạt được kích thước lớp cụ thể, nhưng vì lý do nào đó nó lớn hơn tôi mong đợi.Thuộc tính không được chỉ định sử dụng các trường bit trong lớp C++
Vấn đề là, một lớp có 32 bit (4 byte) đang báo cáo (khi được chuyển làm đối số đến sizeof
) 5 byte. Ví dụ lớp dưới đây:
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));
Nếu các vị trí four_bit_field
và eight_bit_field
được bật, sizeof
trả lại kích thước phù hợp, 4 byte. Tôi tin rằng đó là một vấn đề liên quan đến bộ nhớ.
Vì vậy, ai đó biết lý do đằng sau hành vi này? Và, quan trọng nhất, làm thế nào tôi có thể sửa lỗi này, mà không cần chuyển bất kỳ vị trí nào.
Đó là những gì tôi nghĩ khi tôi nói điều này là một vấn đề bộ nhớ allignment. Nhưng tôi đang tìm một giải pháp cho vấn đề này. – braunmagrin
@braunmagrin, tôi đang bận thử nghiệm giải pháp, xem chỉnh sửa của tôi. –
Tôi xin lỗi vì đã vội vàng. Cảm ơn, điều đó đã được giải quyết. – braunmagrin