GCC結構對齊小結

來源:互聯網
上載者:User

1, 在結構中各成員按其聲明順序在記憶體中順序儲存, 第一個成員的地址即結構的地址.

2, 在預設情況下, 結構的資料成員按其自身寬度自然對齊, 使得每個field的offset為該成員寬度的整數倍, 不足則前面補齊.

3, 整個結構的寬度是最大對齊量的整數倍, 不足則在後面補齊.

4, 更改GCC編譯器的預設位元組對齊有四,
 A, __attribute__ ((packed)), 取消結構在編譯過程中的最佳化對齊, 按照實際佔用位元組數進行對齊.
 B,使用偽指令#pragma pack (n), C編譯器將按照n個位元組對齊. 另使用偽指令#pragma pack (), 取消自訂位元組對齊.
  - 當n大於成員寬度的時候, 成員按照自身寬度對齊.
  - 當n小於成員寬度的時候, 成員按照n對齊.
  - 當n大於最大成員寬度時, 整個結構按照最大成員寬度對齊, 即結構寬度為最大成員寬度的倍數. 不足則在結構最後補齊.
  - 當n小於最大成員寬度時, 整個結構按照n對齊, 即結構寬度為n的倍數.
 C,__attribute((aligned (n))), 用在結構末尾, 讓整個結構對齊在n位元組常態範圍上. 成員總是按照自身寬度對齊.
  - 當n小於最大成員寬度時, 整個結構按照最大成員寬度對齊.
  - 當n大於最大成員寬度時, 整個結構按照n對齊.
 D, __attribute((aligned (n)))用在結構當中的成員上, 表現與C同
  - 當n大於成員寬度的時候, 成員按照n對齊.
  - 當n小於成員寬度的時候, 成員按照自身寬度對齊.

5, 結構中的數組按照單個元素的寬度對齊, 而不是按照整個數組的寬度對齊.

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/young_prog/archive/2005/09/24/488624.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.