c - 在 c 程序中给出意外的联合输出大小
问题描述
代码:
#include <stdio.h>
int main()
{
union sample
{
int m[2];
float n[3];
char ch[18];
}u;
printf("The size of union = %d\n", sizeof(u));
return 0;
}
我期待 18 作为输出 这里它提供了意外的输出。
解决方案
这是因为填充和对齐。
union
当联合是数组的一部分时,A可能在末尾有填充以确保其字段的正确对齐。
在这种情况下,有一个类型为数组的字段int
和另一个类型为数组的字段float
。这些类型的大小很可能是 4 个字节,因此联合的大小需要是 4 的倍数。因此,大小将不是 18,而是 20 以满足该对齐。
推荐阅读
- javascript - 在未呈现的组件中访问不正确的属性时出错
- c# - C# 9.0 中的本机大小整数是什么?
- php - 自定义 WordPress 的激活页面
- javascript - 实现分页和加载微调器以附加元素(多个选项卡)
- powershell - 在powershell中序列化复杂类时排除或选择性地包含子属性
- javascript - select tag onchange 不执行,函数失败:Uncaught ReferenceError: ... is not defined
- python - 重新索引多索引数据框
- javascript - 如何添加循环间隔计时器以保持自动滚动表 3 秒?
- gitlab - GitLab 中的 Jira 集成:缺少问题中的“合并到主要”信息
- python - 如何从 graphene-mongo 的 EmbededDocument 中的“id”中获取芦苇?