c - 为什么结构中只有 "char"类型成员没有填充?

标签 c gcc char structure padding

我在结构中仅声明了 char 类型成员。

#include <stdio.h>

struct st
{
    char c1;
    char c2;
    char c3;
    char c4;
    char c5;
};

int main() {
    struct st s;
    printf("%zu\n", sizeof(s));
    return 0;
}

输出: [ Live Demo ]

5

那么,为什么结构中只有 char 类型成员没有填充?

最佳答案

填充是为了强制对齐要求。如果成员位于可被其大小整除的地址,则称该成员对齐(与其大小)。

<小时/>

在您的示例中不需要填充,因为 st 结构的所有成员都已与其大小对齐,即:st 每个成员的地址已经可以被它的大小整除。所有成员均为 char 类型,char 的大小为 1。如果成员的大小为 1,则该成员始终与其大小对齐,因为任何地址都可以被 1 整除。

关于c - 为什么结构中只有 "char"类型成员没有填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47324044/

相关文章:

c - 按 Enter 键只会在 C 中输入另一行

c++ - c中如何获取进程ID,getpid()没有实现

python - 如何在C/C++程序中加载内核模块

c - 将 xml 值映射到结构体值

c - 列出 C 常量/宏

macos - 在 OS X 10.11 上构建 GCC

c++ - 由于纯字符签名,哪些工具可以诊断 C++ 可移植性问题?

c++ - 使用包含 %1、%2 等而不是 %d、%s 等的格式字符串 - Linux、C++

c - 在c中重命名数组

c - C中不输入任何字符