首页 > 解决方案 > C中结构的大小

问题描述

看看下面的代码:

#include<stdio.h>

struct Node
{
  int data;
  struct Node* nxt;
};

int main()
{
    int a = sizeof(struct Node);
    int b = sizeof(int);
    int c = sizeof(int*);

    printf("size of Node: %d\nsize of int: %d\nsize of int*: %d",a,b,c);

    return 0;
}

以下是上述代码的输出:

size of Node: 16
size of int: 4
size of int*: 8

我的问题是整数的大小是 4 字节,整数指针的大小是 8 字节。所以这两个的总和应该是结构的大小。但是为什么编译器(GCC)说它占用 16 个字节呢?

标签: cpointersstruct

解决方案


[...] 关于结构填充。C 编译器知道在 RAM 中存储未对齐的数据可能会很昂贵,因此它会为您填充数据。如果一个结构中有 5 个字节的数据,它可能会变成 8. 或 16. 或 6. 或任何它想要的。有一些扩展,如对齐和打包的 GCC 属性,可以让您对该过程进行一些控制,但它们是非标准的。C 本身并没有定义填充属性,所以正确答案是:“我不知道”</p>

https://hackernoon.com/so-you-think-you-know-c-8d4e2cd6f6a6


推荐阅读