__attribute__((packed))的作用是让编译器取消结构体在编译过程中的优化对齐,可以保证结构体在不同的处理器中有相同的大小。使用示例:
typedef struct __attribute__((packed)) {
uint8_t protocolType[12];
uint8_t packetType;
uint8_t serviceType;
uint8_t optRetCode;
uint8_t reserved;
uint32_t dataLen;
} PktHeader;
下面用一个例子进行解释:
typedef struct {
char aChar;
int anInt ;
} s;
假如处理器是使用八个字节进行优化对齐。那么aChar将占据第1个字节,紧跟的7个字节将不被使用,然后anInt将从第9个字节开始。
假如处理器是使用四个字节进行优化对齐,那么aChar将占据第1个字节,紧跟的4个字节将不被使用,然后anInt将从第5个字节开始。
如果使用了__attribute__((packed))
typedef struct __attribute__((packed)) {
char aChar;
int anInt ;
} s;
那么将强制让anInt紧跟在aChar后边,aChar占据第1个字节,而anInt从第2个字节开始。
__attribute__((packed))用于取消编译器对结构体成员的默认对齐优化,确保跨平台一致性和固定大小。例如,在不同处理器上保持结构体大小一致。
1655

被折叠的 条评论
为什么被折叠?



