为什么会有内存对齐


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...

面试题 相关文章推荐
什么是java序列化,如何实现java序列化
Nov 14 面试题
C语言笔试题
Sep 04 面试题
C/C++ 笔试、面试题目大汇总
Nov 21 面试题
试解释COMMIT操作和ROLLBACK操作的语义
Jul 25 面试题
上海中网科技笔试题
Feb 19 面试题
什么是三层交换,说说和路由的区别在那里
Sep 01 面试题
武汉瑞得软件笔试题
Oct 27 面试题
一套软件测试笔试题
Jul 25 面试题
String s = new String(“xyz”);创建了几个String Object?
Aug 05 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Jul 02 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
Oct 22 面试题
Java servlet面试题
Mar 04 面试题
数组越界问题
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 验证码的实现代码
2011/07/17 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
python获取图片颜色信息的方法
2015/03/18 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Python中encode()方法的使用简介
2015/05/18 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
python序列类型种类详解
2020/02/26 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
领导干部考察材料
2014/02/08 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
股权投资协议书
2016/03/23 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python