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

C++ 对象布局之padding(填充字节)

padding(填充字节)就是为了让成员按“对齐要求”放置,而在两个成员之间自动塞进去的“空白字节”,程序不会用到这些字节的实际内容。

简单说几点:

  1. 每种类型有自己的对齐要求
    比如常见情况(具体跟平台/编译器有关):

    • char 对齐 1 字节

    • int 对齐 4 字节

    • double 对齐 8 字节

    意思是:这个成员的起始地址通常要是对应数字的倍数,比如 double 要从 8 的倍数的地址开始放。

  2. 编译器为满足对齐,在中间塞“空位”
    你的例子:

    struct A {int x;   // 4 字节,对齐 4char c;  // 1 字节,对齐 1double d;// 8 字节,对齐 8
    };
    

    在内存里大致是:

    • 先放 int x:占 4 字节

    • 再放 char c:占 1 字节

    • 接下来要放 double d,它要求地址是 8 的倍数

    • 此时偏移是 5(从 0 开始:0~3 是 x,4 是 c),5 不是 8 的倍数

    • 编译器就塞入 3 个字节的 padding,让下一个成员从偏移 8 开始

    • 然后从偏移 8 放 double d(8 字节)

    所以布局类似:

    [int x(4B)] [char c(1B)] [padding(3B)] [double d(8B)]
    
  3. 存在的目的

    • 满足 CPU 对内存对齐的要求

    • 提高访问效率(对齐访问通常比不对齐快,有的架构甚至不允许不对齐访问)

一句话总结:

padding 是编译器自动插入的“占位用垃圾字节”,不存储你的有效数据,只是为了让后面的成员在“合适的地址”上开始,从而满足对齐和性能需求。

http://www.dtcms.com/a/614856.html

相关文章:

  • 做直播的视频在线观看网站成都网站制作报价
  • 现在都用什么软件做网站创建网站有免费的吗
  • MVC 布局:深入解析其原理与实践
  • iis添加网站网站设计就业前景如何
  • 学院网站建设策划书wordpress的功能简介
  • LeetCode 热题 100——滑动窗口——找到字符串中所有字母异位词
  • 土动静扭剪三轴仪技术指标
  • exe文件反编译成C语言 | 反编译技巧与应用分析
  • 指数型枚举
  • 竞价网站策划网站建设在作用是什么原因
  • 遵义住房城乡建设厅网站邯郸网站建设恋家
  • LeetCode 面试经典 150_二叉树_路径总和(75_112_C++_简单)(DFS)
  • 赋能职业教育:大众ID.4 CROZZ新能源汽车故障诊断仿真教学软件
  • 网站前端是什么意思品牌策划公司推荐
  • Linux字符设备驱动开发详细教程(简单字符设备驱动框架)
  • 电商网站建设运城商务网站建设难不难
  • 【Linux日新月异(三)】CentOS 7软件管理深度指南:从YUM到源码编译
  • 有了空间和域名 网站容易做吗长沙免费旅游景点大全
  • Linux网络NAT、代理服务和内网穿透
  • wordpress链接 颜色济南网站优化小黑
  • 微信授权登录第三方网站开发做h5网站的公司
  • 企业手机网站开通商城建站系统多少钱
  • 全栈项目实战经验,前后端分离开发流程
  • C# 中使用 Influxdb 1.x(四)——在程序内管理Influxdb服务的启停
  • 大模型的On-Policy Distillation(在线蒸馏策略)
  • 杭州网站建设公司有哪几家浅析社区网站的建设
  • ps手机网站页面设计网站主页设计模板
  • 常闭式4G远程开关,从硬件到软件整体实现
  • 找潍坊做网站的360网址大全电脑版
  • 怎么给网站做php后台库易网网站