c - 结构的填充大小

标签 c struct size

<分区>

我试图了解结构在 C 中的确切工作原理。更准确地说,是结构的大小。

当我打印以下结构的大小时:

struct Test {
   char tab[14];
};

我有输出 14

但是大小

    struct Test2{
         uint16_t  a;
         uint16_t  b;
         uint16_t   c;
         uint64_t  d; 
    };

等于16

我在之前的帖子中读到,有一个“添加填充以满足对齐约束”。那为什么这个填充不适用于第一个例子?

最佳答案

不允许在数组中间应用填充(否则指针运算会中断)。所以 tab 的所有元素都是连续的

此外tab[0]的地址需要和对应的Test实例的地址相同;即在 struct 的开头不允许填充。

但是,最后可能会有填充。但在您的情况下,没有。

关于c - 结构的填充大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55524406/

相关文章:

php - 在 Wordpress 中获取未注册的图像大小

C - 如何在 C 中使用结构体获取时间

c++ - 空结构定义在 C 中是非法的,但在 C++ 中不是?

c++ - C 中的结构声明中的冒号是什么意思?

c - 在循环中编写声明

c++ - 布局兼容类型的目的是什么?

android - 如何使多个 View 具有相同的宽度?

java - 在 Java Swing 中设置较小的按钮尺寸

c - 什么程序/实用程序在源代码中使用特殊字符串 "@(#)"?

c - 打印垃圾 [C]