一.結構體的構成
結構體是由多個成員構成,成員的類型可以是基礎數(shù)據(jù)類型(int、double、bool等)、指針或是其他的結構體。一下是一個結構體的例子:
typedef struct PersonStruct {
double height;
char firstName;
int age;
short weight;
} PersonStruct;
二.計算結構體尺寸大小的規(guī)則
1.數(shù)據(jù)成員對齊規(guī)則:
第一個數(shù)據(jù)成員要放在0的起始位置,之后的成員位置的起始位置要根據(jù)自身的大小的整數(shù)倍去存放。
2.結構體作為成員:
結構體作為成員時,自身的存儲位置要根據(jù)結構內的最大成員的整數(shù)倍去存儲
3.收尾:
結構體的總大小一定是結構體內最大成員的整數(shù)倍,實際大小如果不夠,則需要進行補齊。
以64位為例:
height的大小為8,firstName的大小為1,age的大小為4,weight的大小為2。根據(jù)規(guī)則可得這些成員所占位置為:
height:0-7
firstName:8
age:12-15
weight:16-17
可得結構體PersonStruct的實際大小為18,根據(jù)規(guī)則3以8的整數(shù)倍進行補齊可得PersonStruct的大小為24。

圖例.png
根據(jù)圖例可以看出,這樣會出現(xiàn)留空的情況,會產生出較多的內存浪費,所以可以優(yōu)化結構體的成員排列:
typedef struct PersonStruct {
double height;
int age;
short weight;
char firstName;
} PersonStruct;
這樣排列會使得結構體PersonStruct的大小由24變?yōu)?6:

更新排版.png
降低了內存的占用。