c/c++結構體記憶體對齊(vc6.0)

來源:互聯網
上載者:User

首先編譯環境是vc6.0

在sizeof(結構體)時,記憶體對齊的方式總結:

首先找到整個結構體中佔用位元組最大的類型,假設它佔用的位元組數為M,然後開始按聲明順序依次相加,得到位元組數m,如果m總位元組數不足M,則往後看下一位的位元組n,如果m+n>M,則先不計算n,先將m變為M,然後由n開始計算。(可能表述的不夠清楚,還是看例子)

(1)     第一種定義方式

 struct A{        

      int a;

      char c;

      double b;       

};

 調用sizeof(A)得到的結果是16。

最大的位元組數是8個位元組

int型佔4個位元組,m = 4, m<8

char型佔1個位元組,4+1 = 5 < 8

double型佔8個位元組,5+8>8;

所以5個位元組先對齊,變為8個位元組。

然後再看double,8+8=16個位元組。

(2)第二種定義方式

struct B

{

      int a;

      char c;

      int d;

      double b;

};

調用sizeof(B)得到的結果是24。

int型佔4個位元組,m = 4 < 8

遇到char型, m = 5  < 8

遇到int型,m + n  > 8,

所以前5個位元組先對齊變為8,

再看int型,為4

double為8,4+8>8

所以4個位元組也記憶體對齊變為8個位元組

看double型,8個位元組。8+8+8=24。

(3)第三種定義方式

      struct C

      {

           int a;

           char c;

           char d;

           double b;

      };

調用sizeof的結果是16

4 < 8

4+1 < 8

4+1+1<8

4+1+1+8>8,4+1+1 = 8

8+8 = 16。

(4)第四種定義方式

      struct D{      

           int a;

           double b;

           char c;

      };

調用sizeof的結果是24

4 < 8

4+8>8

4 = 8, 8=8

1<8 1 =8

 8+8+8 =24。

歡迎拍磚。

聯繫我們

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