You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅包含char类型成员的struct结构体是否会存在内存填充padding?

关于全unsigned char类型结构体的内存填充问题

给出的结构体定义如下:

struct dummy {
    unsigned char a;
    unsigned char b;
    unsigned char c;
};

结论

该结构体并非在所有使用场景下都不会被编译器添加内存填充。

  • 常规默认场景下:unsigned char类型的对齐要求为1字节,三个成员在内存中连续排布,成员之间不存在填充,绝大多数桌面、移动端平台的默认编译配置下,该结构体总大小为3字节,无填充。
  • 存在填充的特殊场景:
    1. 手动指定结构体对齐规则时:比如使用GCC/Clang的__attribute__((aligned(4)))修饰结构体、或者开启-fpack-struct=N类编译选项强制结构体对齐粒度为N(N>1)时,编译器会在结构体末尾添加填充,让整个结构体的总大小满足对齐要求,比如强制4字节对齐时,该结构体总大小会变成4字节,最后1字节为填充内容。
    2. 特殊平台ABI要求:部分嵌入式平台、老旧硬件的ABI规则要求所有结构体的总大小必须为2/4等整数倍,这种情况下即使没有手动指定对齐选项,编译器也会自动在结构体末尾添加填充。

C语言标准仅要求结构体成员的地址满足对应类型的对齐要求、且成员相对顺序和定义顺序一致,并未禁止编译器在结构体成员之间或末尾添加填充。对于该全unsigned char类型的结构体,成员之间确实不可能出现填充,但末尾填充是标准允许的行为,并非所有场景下都不存在。

内容的提问来源于stack exchange,提问作者jestro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:48:02