1. 程式人生 > >struct結構體實際佔用位元組

struct結構體實際佔用位元組

原則1.   各成員變數的偏移量必須為該成員大小的整數倍,如不夠則在上一個變數後填充位元組數 

struct student

{

char name;    

int id;

double score;

};

name 偏移量為0,成員大小為1,直接存;

id偏移量為1,成員大小為4,需要在前面補充3個位元組;

score偏移量為8,成員大小為8,直接存;

所以sizeof(student)==16

原則2. 在所有成員計算以後,結構體的總大小—必須為成員變數中最寬型別的整數倍,如不夠則在最後的變數後填充位元組數

struct teacher

{

char name;

short age;

double salary;

int id;

};

name 偏移量為0,成員大小為1,直接存;

age 偏移量為1,成員大小為2,需要在前面補充1個位元組;

salary 偏移量為4,成員大小為8,需要在前面補充4個位元組;

id 偏移量為16,成員大小為4,位元組儲存;

sizeof(student)==20,但20不是double型別的整數倍,後面補充4個位元組

所以 sizeof(student)==24

原則3. 複合型變數的偏移量必須為 該變數中最寬資料型別大小 的整數倍;

struct A

{

char v1;   1位元組,後補7位元組

double v2;    8位元組

}; // 16位元組

struct B

{

int v1;   4位元組,後補4位元組(因為struct A 最寬型別為8位元組)

struct A v2;   16位元組

char v3;  偏移量24,自接存

};

sizeof(struct B)==25, 但25不是 struct A 最寬型別為8位元組 的整數倍,所以後補7位元組

所以sizeof(struct B)==32.