對齊規則
1、每個數據成員在內存中的存儲起始位置必須是自身大小的整數倍,如32位下的int佔4個字節,則存儲地址必須是4的整數倍。
struct node
{
char a;//起始0是1的倍數,a存放在0
int b;//起始1不是4的倍數,起始調整爲4,b存放在4
};
sizeof(node) = 8
2、若結構體node裏有其他的結構體成員node2,則結構體成員node2要從其內部最大元素大小的整數倍地址開始存儲。
struct node//共佔16字節
{
char a;//起始0,放在0
int b;//起始1調整爲4,放在4
double c;//起始8,放在8
};
struct node2
{
int d;//起始0,放在0
char d;//起始4,放在4
node e;//起始從5調整爲8,因爲其中數據成員佔內存最大的是double,佔8字節
};
sizeof(node2) = 24
3、最後,結構體的總大小必須是其內部最大成員的整數倍,不足則補齊。
struct node
{
double a;
char b;
}
sizeof(node)=16