要了解为什么要内存对齐,首先我们要了解什么是内存对齐

  • 什么是内存对齐
    关于什么是内存对齐,我们先来看几个例子
typedef struct {int a;double b;short c;
}A;
typedef struct {int a;short b;double c;
}B;

分别对他们求大小,sizeof(A),sizeof(B)我们所得到的结果是不同的,
sizeof(A)=24而sizeof(B)=16为什么会产生不一样的结果呢?
这是非常简单的一个例子,体现了结构体的内存对齐规则。
在结构体中,从结构体的首地址开始,假设地址从0开始。
对结构体A来说,a占4个字节,占从0~3的字节,b是double类型占8个字节,占从8~15的字节,c占两个字节,从16~17的字节。
对结构体B来说,a占4个字节,从0~3,b占两个字节从4~6;c占8个字节从8~15。
这就是内存对齐,对齐规则是按照成员的声明顺序,依次安排内存,其偏移量为成员大小的整数倍,0看做任何成员的整数倍,最后结构体的大小为最大成员的整数倍(所以这里的A的大小是24,而不是18)。

  • C语言和C++中空类和空结构体的大小
    在C++中规定了空结构体和空类的内存所占大小为1字节,因为c++中规定,任何不同的对象不能拥有相同的内存地址。
    而在C语言中,空的结构体在内存中所占大小为0。(gcc中测试为0,其他编译器不一定)

  • 为什么要内存对齐?
    1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
    2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

什么是内存对齐?为什么要内存对齐?相关推荐

  1. 关于arm处理器 内存编址模式 与 字节对齐方式 (转)

    转自:http://bavon.bokee.com/5429805.html 在x86+Linux上写的程序,在PC机上运行得很好.可是使用ARM的gcc进行交叉编译,再送到DaVinci目标板上运行 ...

  2. NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构...

    本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...

  3. GNU C - 关于8086的内存访问机制以及内存对齐(memory alignment)

    接着前面的文章,这篇文章就来说说menory alignment -- 内存对齐. 一.为什么需要内存对齐? 无论做什么事情,我都习惯性的问自己:为什么我要去做这件事情? 是啊,这可能也是个大家都会去 ...

  4. 探究操作系统的内存分配(malloc)对齐策略

    问题: 我们在写程序的时候经常发现程序使用的内存往往比我们申请的多,为了优化程序的内存占用,搅尽脑汁想要优化内存占用,可是发现自己的代码也无从优化了,怎么办?现在我们把我们的焦点放到malloc上,毕 ...

  5. android 内存对齐,Go struct 内存对齐

    Go struct 内存对齐 常用数据结构系列文章链接: 1 如何计算结构体占用的空间 在 Go 语言中,我们可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数. 1 2 3 ...

  6. 7. 重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章?<从内核角度看IO ...

  7. 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    大家好,我是bin,又到了每周我们见面的时刻了,我在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以一个C10k的问题为主线,从内核角度详细阐 ...

  8. 什么是内存对齐?如何计算内存对齐?为什么要内存对齐?

    内存对齐概念: 要了解内存对齐,我们可以先看下面的例子: typedef struct S {int a;double b;char c; }S;typedef struct B {int a;cha ...

  9. 结构体所占内存的字节数——内存对齐

    1.什么是内存对齐? 下面先来看一个例子: #include <stdio.h> int main() {struct Text1{char c1;short s; char c2;int ...

  10. java 对象内存布局_Java--对象内存布局

    在HotSpot虚拟机中,对象在内存中的存储布局可以分为3块区域:对象头部.实例数据.对齐填充. 一.对象头部Header的布局 Mark Word Class 指针 在32位系统下,上面两部分各占4 ...

最新文章

  1. mysql 查询某个日期时间段,每天同一时间段的数据
  2. php common errors
  3. 计算机视觉的基石-滤波
  4. bat for循环_bat教程[279] reg import命令的用法
  5. Angular实现tab切换
  6. [Swift]LeetCode551. 学生出勤纪录 I | Student Attendance Record I
  7. RHEL5U8配置Centos yum源
  8. 学成在线--10.页面预览
  9. centos php 版本升级 至5.3 wordpress3.7
  10. axure 元件_在Axure中实现波纹点击特效按钮的方法
  11. CSS基本知识之复合选择器、元素显示模式、背景图片位置,精灵图
  12. Oracle不打算修复这两个iPlanet信息泄漏和注入漏洞
  13. linuxliveu盘怎么用_linux mint 12 U盘(live usb)安装及体验
  14. 看完这篇文章就知道为什么要使用 Node.js啦!
  15. 初中七年级上计算机试题答案,初中信息技术考试试题(含答案).docx
  16. 一寸照纯红色底图片_一寸照片背景色一般都是什么颜色范文
  17. Java 架构师是怎样练成的
  18. 为什么说php开发成本低,PHP、JSP和.NET三种语言的对比中开发成本最低的是?
  19. 按计算机应用领域分类 情报检索系统属于,2014年高职单招计算机类模拟试卷一(环职职专)...
  20. java排他_排他文件锁实现(Java版本)

热门文章

  1. MPAndroidChart饼图PieChart设置百分比显示
  2. (二) PyTorch实现perceptual loss
  3. RS485接口EMC设计方案
  4. oommf 提示 mmArchive 保存场文件失败
  5. spring AoP学习 -----AoP的基本概念
  6. 7.19每日股市晚评
  7. 外贸建站选择Zencart还是Magento?
  8. 实验二巩耀阳201421430029
  9. RK3568 buildroot文件系统下的三屏显示
  10. c语言递推公式原理,【图】指标高手的进阶之-公式迭代(原理及应用)_迭代法怎么求收敛阶,牛顿切线法迭代公式,迭代公式,迭代算法,递推公式_指标编写互助答疑论坛_理想论坛 - 股票论坛...