美文网首页开发者内功修炼
什么是内存对齐,原理你真的了解吗?

什么是内存对齐,原理你真的了解吗?

作者: yanfeizhang | 来源:发表于2019-05-16 09:34 被阅读0次

相信绝大多数的人都知道内存对齐,但是其最最底层的原理是啥呢?

前面我们说过内存是由chip构成。每个chip内部,是由8个bank组成的。其构造如下图: 图2.内存颗粒物理结构 在每个bank内部,就是电容的行列矩阵结构了。(注意,二维矩阵中的一个元素一般存储着8个bit,也就是说包含了8个小电容)。 图3.bank物理结构
8个同位置的元素,一起组成在内存中连续的64个bit。如下图 图4.jpg

内存在进行IO的时候,一次操作取的就是64个bit。
所以,内存对齐最最底层的原因是内存的IO是以64bit为单位进行的。 对于64位数据宽度的内存,假如cpu也是64位的cpu(现在的计算机基本都是这样的),每次内存IO获取数据都是从同行同列的8个chip中各自读取一个字节拼起来的。从内存的0地址开始,0-63bit的数据可以一次IO读取出来,64-127bit的数据也可以一次读取出来。CPU和内存IO的硬件限制导致没办法一次跨在两个数据宽度中间进行IO。
假如对于一个c的程序员,如果把一个bigint(64位)地址写到的0x0001开始,而不是0x0000开始,那么数据并没有存在同一行列地址上。因此cpu必须得让内存工作两次才能取到完整的数据。效率自然就很低。这下你有没有彻底理解了内存对齐?

扩展1:如果不强制对地址进行操作,仅仅只是简单用c定义一个结构体,编译和链接器会自动替开发者对齐内存的。尽量帮你保证一个变量不跨列寻址。

扩展2:其实在内存硬件层上,还有操作系统层。操作系统还管理了CPU的一级、二级、三级缓存。实际中不一定每次IO都从内存出,如果你的数据局部性足够好,那么很有可能只需要少量的内存IO,大部分都是更为高效的高速缓存IO。但是高速缓存和内存一样,也是要考虑对齐的。

个人公众号“开发内功管理”,打通理论与实践的任督二脉。

相关文章

  • Unity3D面试题知识点

    感谢各位大佬的文章,实在学到许多。 CSAPP、OS 什么是内存对齐,原理你真的了解吗? https://www....

  • 什么是内存对齐,原理你真的了解吗?

    相信绝大多数的人都知道内存对齐,但是其最最底层的原理是啥呢? 内存在进行IO的时候,一次操作取的就是64个bit。...

  • iOS底层 - 内存字节的对齐规则

    要了解内存对齐的规则,首先我们要先知道什么是内存对齐。 内存字节对齐的概念: 计算机中内存空间是按照byte划分的...

  • 结构体内存对齐

    对象内存对齐 探讨的问题 1.什么是内存对齐?2.为什么要做内存对齐?3.结构体内存对齐规则4.源码内存对齐算法 ...

  • 内存对齐

    本次主要讨论三个问题: 什么是内存对齐 内存对齐的好处 如何对齐 内存对齐 内存对齐是一种提高内存访问速度的策略。...

  • iOS 结构体内存对齐浅析

    什么是内存对齐 内存对齐是一种在计算机内存中排列数据、访问数据的一种方式。它包含基本数据对齐和结构体数据对齐 。 ...

  • iOS底层之内存对齐算法解析

    目前但凡一个iOS岗面试都会问个内存对齐问题,那么什么是字节对齐?成员变量对齐和对象内存对齐有什么区别?今天我来为...

  • 内存对齐

    内存对齐 什么叫内存对齐内存对齐就是按照特定的规则对数据进行存储,一般编译器按照8字节对齐标准处理。内存对齐一般用...

  • 内存对齐

    内存对齐 为什么是16,而不是9呢?这就是因为内存对齐的原因 为什么需要内存对齐 计算机系统对基本数据类型的合法地...

  • 内存对齐

    在C语言柔性数组一文中,提到了内存对齐,于是想写篇文章总结总结内存对齐。 内存对齐 为什么需要内存对齐 计算机系统...

网友评论

    本文标题:什么是内存对齐,原理你真的了解吗?

    本文链接:https://www.haomeiwen.com/subject/fmkbaqtx.html