c\c++裡struct位元組對齊規則

來源:互聯網
上載者:User

標籤:部落格   類型   整數   href   sdn   class   分享圖片   log   .net   

  規則一.: 每個成員變數在其結構體內的位移量都是成員變數類型的大小的倍數。

    規則二: 如果有嵌套結構體,那麼內嵌結構體的第一個成員變數在外結構體中的位移量,是內嵌結構體中那個資料類型大小最大的成員變數的倍數。

    規則三: 整個結構體的大小要是這個結構體內資料類型大小最大的成員變數的倍數。如果有內嵌結構體,那麼取內嵌結構體中資料類型大小最大的成員變數作為計算外結構體整體大小的依據。

例子
typedef struct TEST{    int na;    char cb;    char cc;    int nd;    char cf;    struct TT{        int ng;        long long llh;    }tt;    char ci;}test;

 

                        圖一

  如所示,根據規則一,nd在結構體內的位置必須滿足是其自身資料類型大小的整數倍,且倍數要取滿足條件的最小倍數。因為nd前三個成員變數總大小是6Bytes,nd作為int類型,其資料類型大小是4Bytes,滿足條件的最小倍數是2,所以nd在結構體中的位移量是8,故填充2Bytes。

  根據規則二,ng作為內嵌結構體的第一個成員變數,它在外結構體中的位移量要滿足——其內嵌結構體中最大資料類型大小的倍數。在計算cf位移量後,當前位移量是13,而內嵌結構體中最大資料類型為long long,其大小為8,ng的位移量必須是8的倍數,且取大於13的最小倍數,即2。所以ng前要填充3Bytes。

  根據規則三,計算完ci後,當前位移量是33。如果要滿足test結構體的大小是其中最大資料成員類型大小的倍數,在此例中是內嵌結構體的成員變數llh,即8的倍數。所以要填充7Bytes。

參考

CSDN部落格:55262988

c\c++裡struct位元組對齊規則

聯繫我們

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