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

内存对齐

环境

  • 32位操作系统

通过结构体的内存字节对齐了解操作系统的内存对齐

  • 在32位操作系统中, CPU默认读和写数据是按照4字节的方式
  • 在一个结构体中, 在编译的时候, 编译器会根据结构体中的成员变量使其内存对齐, 让他们都是符合让CPU一次读取的数据而不用再读取一次数据, 减少了读取的次数
  • 下面通过案例讲解

1. 
    struct s {
        char c; // 占用1个字节
        int i; // 占用4个字节
        short s; // 占用2个字节
    }stu;
    如果不对齐的话, 则c与i的前3个字节在同一个4字节内, s和i的后1个字节在另外一个4字节内, 当使用stu.i访问的时候, CPU要读取第一个4字节获取i的前三个字节的数据, 在读取后4个字节获取i的后一个字节的数据, 接受处理数据拿出i的值
    如果对齐的话, 在编译器会自动添加一些无关的变量对数据进行填充, 使得c一个4字节, i一个4字节, s一个4字节, 这样获取stu.i就是一个内存访问了, 该结构体占了12个字节

2. 
    struct s {
        char c;
        short t;
        int i;
        char ch;
    };
    编译器的对齐方式中, c和t是在同一个4字节中的, 因为CPU一次性就可以读取出来一个4字节, CPU在过滤一下就可以取出c的值了, 这样节省了内存

相关文章:

  • opencv提取保存轮廓图
  • Vue中注意target和currentTarget的使用
  • 并发-4-volatile
  • [SDOI2009]Elaxia的路线
  • ES学习笔记(12)--Symbol
  • Redis 中的布隆过滤器
  • json字符串 转换为数组
  • 用mpvue开发微信小程序
  • hadoop副本放置策略
  • 【逆序对】N*M Puzzle / Simple Puzzle
  • JavaCV cvEstimateRigidTransform函数使用心得
  • 10.17_T1 平津战役
  • EOS开发完全解析(二):用cleos命令行创建、导入、解锁钱包
  • 返回一个二维整数数组中最大子数组的和
  • 1、jeecg 笔记开篇
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 5、React组件事件详解
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Codepen 每日精选(2018-3-25)
  • HomeBrew常规使用教程
  • LeetCode29.两数相除 JavaScript
  • Netty 4.1 源代码学习:线程模型
  • React-flux杂记
  • 半理解系列--Promise的进化史
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 入门到放弃node系列之Hello Word篇
  • 项目实战-Api的解决方案
  • 阿里云ACE认证之理解CDN技术
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​插件化DPI在商用WIFI中的价值
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • %check_box% in rails :coditions={:has_many , :through}
  • (27)4.8 习题课
  • (python)数据结构---字典
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)构建dubbo分布式平台-平台功能导图
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十八)三元表达式和列表解析
  • (四)图像的%2线性拉伸
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET DataGridView数据绑定说明
  • .NET NPOI导出Excel详解
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...