__attribute__((packed)) 詳解

來源:互聯網
上載者:User

標籤:style   blog   color   使用   資料   c   

摘自LDD3

為了編寫可以在不同平台之間可移植的資料項目的資料結構,除了規定特定的位元組序以外,還應該始終強制資料項目的自然對齊。
自然對齊(Natural Alignment)是指在資料項目大小的整數倍(例如,8位元組資料項目存入8的整數倍的地址)的地址處儲存資料項目。
強制自然對齊可以防止編譯器移動資料結構的欄位,你應該使用填充符(filer)欄位來避免在資料結構中留下空洞。

編譯器本身可能會往結構體中插入填充資料,以確保每個欄位的對齊可以在目標處理器上取得好的效能。
如果正在定義一個和裝置要求的結構體相匹配的結構體,這種自動填滿會破壞你的意圖。解決的辦法是告訴編譯器結構體必須是“填滿的”,不能添加填充符。
就是在結構體聲明的地方加上__attribute__((packed)),例如:

struct {     u16 id;     u64 lun;     u16 reserved1;     u32 reserved2; } __attribute__ ((packed)) scsi;

如果沒有__attribute__((packed)),lun欄位前面會被插入兩個填充位元組,按4位元組對齊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.