用C语言查找结构的大小

时间:2019-07-06 20:58:57

标签: c++ c

在节点的结构中,数据的大小为4个字节,node *的大小为8个字节,而node的大小为16个字节。在4 + 8 = 12之后,节点的4个额外字节在哪里?

我对此一无所知。

struct node
{
    int data;
    struct node* next;
}s;
int main()
{
     printf("node => %d \n",sizeof(s));
     printf("node.data => %d \n",sizeof(s.data));
     printf("node* => %d ",sizeof(s.next));
 return 0;
 }
 /*OUTPUT- 
 node => 16 
 node.data => 4
 node* => 8 */

1 个答案:

答案 0 :(得分:0)

从本文档 (https://en.cppreference.com/w/c/language/struct在结构的任何两个成员之间或最后一个成员之后,但在第一个成员之前,可能没有未命名的填充。结构的大小至少等于其成员的大小之和。

这是由于对齐要求所致。

    |--|--|--|--|??|??|??|??|--|--|--|--|--|--|--|--|
    int         padding     pointer

指针在您的平台上对齐为8的倍数。
https://en.wikipedia.org/wiki/Data_structure_alignment

相关问题