Tại sao kích cỡ của struct là 8 byte?

và mọi người cho e hỏi luôn đoạn code này

#include<stdint.h>
struct packet
{
uint8_t crc; //1 byte
uint8_t status; //1
uint16_t payload; //2
uint8_t bat;  //1
uint8_t sensor; //1
uint8_t lastAddr; //1
};

int main()
{
struct packet packet;
printf("%#X \n", (unsigned int)&packet.crc);
printf("%#X \n", (unsigned int)&packet.status);
printf("%#X \n", (unsigned int)&packet.payload);
printf("%#X \n", (unsigned int)&packet.bat);
printf("%#X \n", (unsigned int)&packet.sensor);
printf("%#X \n", (unsigned int)&packet.lastAddr);

printf("size of struct is %I32u", sizeof(packet));
getchar();
return 0;
}

Tại sao struct kia lại 8 byte ạ. E nghĩ do thằng cuối cùng bị padding thêm 1 byte. Do compiler nó ko đặt đc thêm biến vào địa chỉ lẻ sau cái thằng cuối cùng. Thế nên nó padding thêm 1 byte đấy. Để khi cấp phát tiếp nó vào địa chỉ chẵn

1 Like

Vấn đề này đã bàn khá nhiều trên diễn đàn rồi. Bạn tham khảo thêm tại

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?