1. 程式人生 > >計算類的大小--位元組對齊

計算類的大小--位元組對齊

class A
{
        int a;
        short b;
        int c;
        char d;
};
class B
{
        double a;
        short b;
        int c;
        char d;
};

在32位機器上用gcc編譯以上程式碼,求sizeof(A),sizeof(B)分別是多少。

正確答案: C   你的答案: C (正確)

12 16
12 12
16 24
16 20

C
根據以下條件進行計算:
1、  結構體的大小等於結構體內最大成員大小的整數倍


2、  結構體內的成員的首地址相對於結構體首地址的偏移量是其型別大小的整數倍,比如說double型成員相對於結構體的首地址的地址偏移量應該是8的倍數。
3、  為了滿足規則1和2編譯器會在結構體成員之後進行位元組填充!

A中,a佔4個位元組,b本應占2個位元組,但由於c佔4個位元組,為了滿足條件2,b多佔用2個位元組,為了滿足條件1,d佔用4個位元組,一共16個位元組。
B中,a佔8個位元組,b佔2個位元組,但由於c佔4個位元組,為了滿足條件2,b多佔用2個位元組,
即abc共佔用8+4+4=16個位元組,
為了滿足條件1,d將佔用8個位元組,一共24個位元組。