所以,我編碼一些數據包結構(以太網,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