当前位置: 首页 > news >正文

23、字节对齐

struct AlignedStruct {char a;   // 本来1字节,padding 3 字节int b;    //  4 字节short c;  // 本来 short 2字节,但是整体需要按照 4 字节对齐(成员对齐边界最大的是int 4) // 所以需要padding 2// 总共: 4 + 4 + 4
};struct MyStruct {double a;    // 8 个字节char b;      // 本来占一个字节,但是接下来的 int 需要起始地址为4的倍数//所以这里也会加3字节的paddingint c;       // 4 个字节// 总共:  8 + 4 + 4 = 16
};

分析 struct MyStruct 的对齐情况。

  1. double a 占用 8 个字节,起始地址为 0。
  2. char b 占用 1 个字节,起始地址为 8。
  3. 为了使 int c 对齐到 4 字节边界,需要在 char b 后面填充 3 个字节的 padding,因此 int c 的起始地址为 12。
  4. int c 占用 4 个字节,起始地址为 12。

因此,struct MyStruct 的总大小为 16 个字节。

为了进一步验证,我们可以编写一个简单的 C++ 程序来检查结构体的大小:

#include <iostream>struct MyStruct {double a;char b;int c;
};int main() {std::cout << "Size of MyStruct: " << sizeof(MyStruct) << " bytes" << std::endl;return 0;
}

运行这个程序,会发现 MyStruct 的大小确实是 16 个字节。

总结:struct MyStruct 的对齐之后的大小是 16 个字节,而不是 24 个字节。


AlignedStruct 为什么是 12 呢 ?
详细分析 struct AlignedStruct 的对齐情况:

  1. char a 占用 1 个字节,起始地址为 0。
  2. 为了使 int b 对齐到 4 字节边界,需要在 char a 后面填充 3 个字节的 padding,因此 int b 的起始地址为 4。
  3. int b 占用 4 个字节,起始地址为 4。
  4. short c 占用 2 个字节,起始地址为 8。
  5. 为了使整个结构体的大小是 int 的倍数(最大对齐边界),需要在 short c 后面填充 2 个字节的 padding。

因此,struct AlignedStruct 的总大小为 12 个字节。

为了进一步验证,我们可以编写一个简单的 C++ 程序来检查结构体的大小:

#include <iostream>struct AlignedStruct {char a;int b;short c;
};int main() {std::cout << "Size of AlignedStruct: " << sizeof(AlignedStruct) << " bytes" << std::endl;return 0;
}

运行这个程序,会发现 AlignedStruct 的大小确实是 12 个字节。

总结:struct AlignedStruct 的对齐之后的大小是 12 个字节。

相关文章:

  • Xxl-job——源码设计思考
  • 数据通信基础
  • Axure应用交互设计:注册登录页完整交互设计
  • 【Linux操作系统】基础开发工具(yum、vim、gcc/g++)
  • sendDefaultImpl call timeout(rocketmq)
  • 【Python】屏幕像素颜色值的获取
  • SpringBoot-17-MyBatis动态SQL标签之常用标签
  • Unity的日志管理类
  • 【CF】Day78——⭐Codeforces Round 876 (Div. 2) D (LIS | 思维 | DP)
  • 15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
  • go工具库:hertz api框架 hertz client的使用
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • 使用python实现奔跑的线条效果
  • TTL简述
  • 基于算法竞赛的c++编程(20)函数的递归
  • OpenLayers:封装Tooltip
  • stm32—ADC和DAC
  • Linux操作系统故障应急场景及对应排查方法
  • 湖北理元理律师事务所:债务优化中的民生保障实践
  • FreeRTOS任务之深入篇
  • 厦门 外贸商城网站制作/成都网站seo厂家
  • 母版页做网站例子/电话百度
  • 哪个网站做海报比较好/新榜数据平台
  • 硬件开发学什么专业/站长之家seo综合
  • 网站设计公司推荐奇点网络/百度ocpc怎么优化
  • 东山县城乡规划建设局网站/营销咨询公司排名