结构采用32位架构

CBr*_*eze 2 c byte struct

以下代码;

struct s1 {
    void *a;
    char b[2];
    int c;
};

struct s2 {
    void *a;
    char b[2];
    int c;
}__attribute__((packed));
Run Code Online (Sandbox Code Playgroud)

如果s1大小为12个字节并且s2大小为10个字节,这是由于数据是以4个字节的块读取还是}__attribute__((packed));将大小减小void*a;到只有2个字节?

有点困惑的是什么}__attribute__((packed));.

非常感谢

unw*_*ind 5

这是由于对齐,这是一个过程,在这个过程中,编译器在字段之间添加隐藏的"垃圾",以确保它们具有最佳(用于性能)起始地址.

使用packed强制编译器不这样做,这通常意味着如果硬件在例如对不是4的倍数的地址进行32位访问时遇到问题,则访问结构变得更慢(或者根本不可能,导致例如总线错误).