在C语言中找到结构的大小

finding size of a structure in c language

本文关键字:结构 语言      更新时间:2023-10-16

数据的节点大小的结构是4个字节,节点*的大小为8个字节,而节点的大小为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 */

来自此文档(https://en.cppreference.com/w/c/language/struct(在结构的任意两个成员或最后一个成员之后,可能都有未命名的填充,但在第一个成员之前没有。结构的大小至少与其成员大小的总和一样大。

这是由于对齐要求。

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

指针在平台上的8个倍数上对齐。
(https://en.wikipedia.org/wiki/Data_Structure_alignment(