c - 如何计算带位域的结构体的大小?

标签 c struct

#include <stdio.h> 
struct test { 
unsigned int x; 
long int y : 33; 
unsigned int z; 
};  
int main() 
{ 
struct test t; 
printf("%d", sizeof(t)); 
return 0; 

}

我得到的输出为 24。它与此相等吗?

最佳答案

由于您的实现接受 long int y : 33; 系统上的 long int 长度超过 32 位,因此我假设为 64 位。

如果普通int也是64位,则24的结果是正常的。

如果它们只有 32 位,则您遇到了填充对齐。出于性能原因,64 位系统上的 64 位类型在 64 位边界上对齐。所以你有:

  • 第一个 int 为 4 个字节
  • 4 个填充字节以达到 8 字节边界
  • 位域容器8个字节
  • 第二个 int 为 4 个字节
  • 4 个填充字节以允许数组正确对齐

总计:24 字节

关于c - 如何计算带位域的结构体的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66601301/

相关文章:

c - 确定字符串文字的长度

c - 检测字符串中的单个字符

c - 你如何处理未知数量的命令行参数?

c - 向 TUN/TAP 接口(interface)发送自定义命令

c - '.' or ' ->'C 结构体访问器

c - 在结构中初始化数组

c 将 typedef 放入结构中

c - 在动态数组上使用 tolower() 时出现段错误

objective-c - 在 Objective-C 中转换为结构

c - ARM GCC 打包结构地址警告