带你深入理解内存对齐最底层原理

相信绝大多数的人都了解内存对齐,对齐后性能高。但是其最最底层的原理是啥呢? 有的人可能会说,因为高速缓存的工作机制。读者你很聪明,这是原因之一。但我今天想挖的是更底层一点的原理,让我们去内存的物理构成里找找答案!

内存物理结构

我们来了解一下内存的物理构造,一般内存的外形图片如下图:

图1 内存外形图

一个内存是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个chip。每个chip内部,是由8个bank组成的。其构造如下图:

图2 chip内部构成

而每一个bank是一个二维平面上的矩阵,前面文章中我们说到过。矩阵中每一个元素中都是保存了1个字节,也就是8个bit。

图3 bank内部构成

内存编址方式

那么对于我们在应用程序中内存中地址连续的8个字节,例如0x0000-0x0007,是从位于bank上的呢?直观感觉,应该是在第一个bank上吗?其实不是的,程序员视角看起来连续的地址0x0000-0x0007,实际上是位于8个bank中的,每一个bank只保存了一个字节。在物理上,他们并不连续。下图很好地阐述了实际情况。

图4 连续8字节在内存中实际分布

你可能想知道这是为什么,原因是电路工作效率。内存中的8个bank是可以并行工作的。如果你想读取地址0x0000-0x0007,每个bank工作一次,拼起来就是你要的数据,IO效率会比较高。但要存在一个bank里,那这个bank只能自己干活。只能串行进行读取,需要读8次,这样速度会慢很多。

结论

所以,内存对齐最最底层的原因是内存的IO是以8个字节64bit为单位进行的。 对于64位数据宽度的内存,假如cpu也是64位的cpu(现在的计算机基本都是这样的),每次内存IO获取数据都是从同行同列的8个bank中各自读取一个字节拼起来的。从内存的0地址开始,0-7字节的数据可以一次IO读取出来,8-15字节的数据也可以一次读取出来。

换个例子,假如你指定要获取的是0x0001-0x0008,也是8字节,但是不是0开头的,内存需要怎么工作呢?没有好办法,内存只好先工作一次把0x0000-0x0007取出来,然后再把0x0008-0x0015取出来,把两次的结果都返回给你。CPU和内存IO的硬件限制导致没办法一次跨在两个数据宽度中间进行IO。这样你的应用程序就会变慢,算是计算机因为你不懂内存对齐而给你的一点点惩罚。

扩展1:事实上,编译和链接器会自动替开发者对齐内存的,尽量帮你保证一个变量不跨列寻址。但是他不能做到十分完美。

扩展2:其实在内存硬件层上,还有操作系统层。操作系统还管理了CPU的一级、二级、三级缓存。不知道你有没有印象,我们前面的文章说过高速缓存里的Cache Line是64字节,它是内存IO单位的8倍,不会让内存IO浪费。

(0)

相关推荐

  • 计算机操作系统原理

    最近准备i面试,抽时间回顾一下计算机操作系统原理.  -2018.10.1 1.硬件基础 计算机的构成: 处理器(CPU):主要包括运算器.控制器 内存(主存储器) 输入输出设备 详细的讲,CPU内部 ...

  • 内存不够用还要速度快,终于找到可以基于 File 的 Cache 了

    一:背景 1. 讲故事 18年的时候在做纯内存项目的过程中遇到了这么一个问题,因为一些核心数据都是飘在内存中,所以内存空间对我们来说额外宝贵,但偏偏项目中有些数据需要缓存,比如说需要下钻的报表上的点, ...

  • 性能优化那些事

    性能在软件工程诞生时就占据着非常重要的位置,如何用更少的硬件资源来支撑更多的功能.来完成更多的任务是软件工程师的职责,也是用来衡量一个软件工程师技艺高低的标准. 性能在软件工程诞生时就占据着非常重要的 ...

  • 内存随机也比顺序访问慢,带你深入理解内存IO过程

    平时大家都知道内存访问很快,今天来让我们来思考两个问题: 问题1: 内存访问一次延时到底是多少?你是否会进行大概的估算? 例如笔者的内存条的Speed显示是1066MHz,那是否可以推算出内存IO延时 ...

  • 内存随机比顺序访问慢,带你深入理解内存IO过程

    平时大家都知道内存访问很快,今天来让我们来思考两个问题:问题1: 内存访问一次延时到底是多少?你是否会进行大概的估算?例如笔者的内存条的Speed显示是1066MHz,那是否可以推算出内存IO延时是1 ...

  • 手摸手带你理解Vue的Watch原理

    前言 watch 是由用户定义的数据监听,当监听的属性发生改变就会触发回调,这项配置在业务中是很常用.在面试时,也是必问知识点,一般会用作和 computed 进行比较. 那么本文就来带大家从源码理解 ...

  • 手摸手带你理解Vue响应式原理

    前言 响应式原理作为 Vue 的核心,使用数据劫持实现数据驱动视图.在面试中是经常考查的知识点,也是面试加分项. 本文将会循序渐进的解析响应式原理的工作流程,主要以下面结构进行: 分析主要成员,了解它 ...

  • 习练太极拳快速进步法!10分钟带您从理解“缠丝劲”开始

    习练太极拳快速进步法!10分钟带您从理解“缠丝劲”开始

  • 父母出资为子女买房的纠纷怎么解?最高院法官带你来理解与适用

    来源:人民司法(节选) <关于适用民法典婚姻家庭编的解释(一)> 若干重点问题的理解与适用 本文刊登于<人民司法>2021年第13期 作者:郑学林 刘敏 王丹 作者单位:最高人 ...

  • 【案例挖掘机】天猫、康师傅、珀莱雅、I DO、完美日记带你重新理解爱

    [案例挖掘机]项目,致力于以汪峰式的拷问深度剖析案例背后有趣的故事,大到年度规划的投放技巧,小到拍摄现场的蚊虫叮咬. 每周一次的精彩案例大放送如约而至.不知不觉,五月已过半.本周(2021第20周,5 ...

  • 走进RF信号链,ADI带你深入理解其特性和性能指标

    从历史的角度来看,就在不久之前,也就是20世纪初,支持RF信号链的RF工程学还是一门新兴的学科.如今,RF技术和射频器件深深根植于我们的生活,没有它们,现代文明可能不会存在.生活中有无数非常依赖RF信 ...

  • 【狂人专辑】6分钟带你大概理解新版工会科技点法

    未经允许禁止转载!! 六分钟理解新版公会科技 视频 文字版将在明日放松  结语  那么本期视频就到此结束,喜欢的朋友点一下赞和关注. 公众号做什么? 公众号内容 活动攻略: 游戏每周活动都会制作活动相 ...