为什么会有内存对齐


Posted in 面试题 onOctober 10, 2016
字,双字,和四字在自然边界上不需要在内存中对齐。(对字,双字,和四字来说,自然边界分别是偶数地址,可以被4 整除的地址,和可以被8 整除的地址。)无论如何,为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。
一个字或双字操作数跨越了4 字节边界,或者一个四字操作数跨越了8 字节边界,被认为是未对齐的,从而需要两次总线周期来访问内存。一个字起始地址是奇数但却没有跨越字边界被认为是对齐的,能够在一个总线周期中被访问。某些操作双四字的指令需要内存操作数在自然边界上对齐。如果操作数没有对齐,这些指令将会产生一个通用保护异常。
双四字的自然边界是能够被16 整除的地址。其他的操作双四字的指令允许未对齐的访问(不会产生通用保护异常),然而,需要额外的内存总线周期来访问内存中未对齐的数据。
缺省情况下,编译器默认将结构、栈中的成员数据进行内存对齐。因此,上面的程序输出就变成了:c1 00000000, s 00000002, c2 00000004, i 00000008。编译器将未对齐的成员向后移,将每一个都成员对齐到自然边界上,从而也导致了整个结构的尺寸变大。尽管会牺牲一点空间(成员之间有部分内存空闲),但提高了性能。也正是这个原因,我们不可以断言sizeof(TestStruct1)的结果为8。在这个例子中,sizeof(TestStruct1)的结果为12。

Tags in this post...

面试题 相关文章推荐
一套PHP的笔试题
May 31 面试题
介绍一下Java的安全机制
Jun 28 面试题
天逸系统(武汉)有限公司Java笔试题
Dec 29 面试题
上海奥佳笔试题面试题
Nov 16 面试题
编写strcpy函数
Jun 24 面试题
介绍一下代理模式(Proxy)
Oct 17 面试题
西安启天科技有限公司网络工程师面试题笔试题
Jun 12 面试题
Linux如何为某个操作添加别名
Mar 01 面试题
为什么需要版本控制?
Aug 08 面试题
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
Oct 12 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
Jan 12 面试题
关键字throw与throws的用法差异
Nov 22 面试题
数组越界问题
Oct 21 #面试题
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
Feb 22 #面试题
介绍一下#error预处理
Sep 25 #面试题
const char*, char const*, char*const的区别是什么
Jul 09 #面试题
雅虎笔试题(字符串操作)
Mar 24 #面试题
枚举与#define宏的区别
Apr 30 #面试题
一家外企的面试题目(C/C++面试题,C语言面试题)
Mar 24 #面试题
You might like
PHP实现MySQL更新记录的代码
2008/06/07 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python 递归函数详解及实例
2016/12/27 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Django models文件模型变更错误解决
2020/05/11 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
python 制作本地应用搜索工具
2021/02/27 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
公共事业管理本科生求职信
2013/10/07 职场文书
大学生自荐信
2013/12/11 职场文书
小区门卫值班制度
2014/01/24 职场文书
2015新年寄语大全
2014/12/08 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
SQL Server 中的事务介绍
2022/05/20 SQL Server