所以,我编码一些数据包结构(以太网,IP等),并注意到其中一些属性((packed)),它阻止gcc编译器尝试向其添加填充。这是有道理的,因为这些结构应该走上电线。数据结构对齐
但后来,我算的话:
struct ether_header
{
u_int8_t ether_dhost[ETH_ALEN]; /* destination eth addr */
u_int8_t ether_shost[ETH_ALEN]; /* source ether addr */
u_int16_t ether_type; /* packet type ID field */
} __attribute__ ((packed));
这是从一个网站复制,但我的代码也使用2 uint8_t和1个uint16_t。这增加了两个字(4字节)。
根据来源不同,系统更喜欢按照4,8或甚至16位的倍数对齐结构。所以,我不明白为什么属性((packed))是必要的,因为afaik不应该打包。
此外,为什么双括号((包装))为什么不使用一对?
我忘了uint8_t是数组;愚蠢的我,但良好的呼吁计划改变。 – mamidon 2009-11-05 03:22:23