首页 > 解决方案 > 在c语言中查找结构的大小

问题描述

在节点结构中,数据大小为 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 */

标签: c++c

解决方案


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

这是由于对齐要求。

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

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


推荐阅读