【C++】結構體/聯合中的數據成員對齊規則

對齊規則

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章