[C 的那些眉角]struct padding 和 alignment — 為什麼 sizeof 結果跟你算的不一樣

有一次在對接兩邊的通訊,一邊是 MCU,一邊是 PC 端的測試工具。協定 header 很單純:1 byte type、4 bytes length、2 bytes sequence,加起來 7 bytes。

我很有自信地在 MCU 這邊定義了一個 struct,直接 send() 整個 struct 出去。結果 PC 那邊收到的 length 永遠是亂碼,seq 更是一塌糊塗。

Wireshark 一抓,發現封包長度不是 7,竟然是 12。

原來,多出來的 5 個 byte,不是我寫的,是編譯器幫我「貼心」塞的。🙃

閱讀全文