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

为何C语言程序中struct var1大小为11而非12字节?

问题解答:struct var1大小为何是11字节而非12字节

先看你的结构体定义:

struct var1 {
    char data1;
    char arr1[10];
};

结构体的内存大小计算核心是内存对齐规则,对齐的目的是让CPU更高效地访问内存,避免跨总线周期读取数据。

步骤1:计算成员总大小

  • char data1 占1字节
  • char arr1[10] 占10字节
    成员总大小是 1 + 10 = 11 字节。

步骤2:确定结构体的整体对齐要求

结构体的整体对齐值,等于其内部最大基本数据类型成员的对齐要求。这里结构体里的成员都是char类型,char的对齐要求是1字节(即只要地址是1的倍数即可,不需要额外填充)。

因为整体对齐要求是1字节,结构体总大小11已经是1的整数倍,所以不需要在末尾补填充字节,最终大小就是11字节。

补充:为什么你可能误以为是12字节?

你可能混淆了包含更大类型的结构体情况。比如如果结构体里有int(对齐要求4字节),即使成员总大小是11,也会填充到12字节以满足4字节的对齐要求。但你的结构体里全是char,不存在这个问题。

顺带解释union var2的大小是8字节

你的union定义:

union var2 {
    int data2;
    char arr2[5];
};

union的大小取其内部最大成员的大小,再向上对齐到自身的最大对齐要求:

  • int data2 占4字节,对齐要求4字节
  • char arr2[5] 占5字节,对齐要求1字节
    最大成员大小是5字节,而union的对齐要求由最大的基本类型成员(int)决定为4字节,5需要向上取最近的4的倍数,也就是8,所以union var2的大小是8字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:40:00