【问题标题】:finding size of a structure in c language [duplicate]在c语言中查找结构的大小[重复]
【发布时间】:2019-07-06 20:58:57
【问题描述】:

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

【问题讨论】:

  • 你看到有一个实际例子data structure alignment维基百科的文章就够了,
  • 如果您正在寻找 C 中的解决方案,为什么这会被标记为 C# 和 C++?请仅使用相关标签。
  • 查找“结构填充”以解释为什么结构的大小可以大于其成员大小的总和。此外,使用%d 打印sizeof 运算符的结果会给出未定义的行为,因为%d 指定了int,而sizeof 不会给出int 类型的结果。

标签: c++ c


【解决方案1】:

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

这是由于对齐要求。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 2011-06-09
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2020-05-12
    相关资源
    最近更新 更多