为什么会有内存对齐


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

面试题 相关文章推荐
描述一下JVM加载class文件的原理机制
Dec 08 面试题
类如何去实现接口
Dec 19 面试题
求网格中的黑点分布
Nov 06 面试题
如何用SQL语句进行模糊查找
Sep 25 面试题
以太网Ethernet IEEE802.3
Aug 05 面试题
init进程的作用
Apr 12 面试题
Linux开机引导的步骤是什么
Feb 26 面试题
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
Nov 04 面试题
sleep()方法和wait()方法的区别是什么
Nov 17 面试题
过滤器的用法
Oct 08 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Jul 27 面试题
java程序员面试交流
Nov 29 面试题
数组越界问题
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
html中select语句读取mysql表中内容
2006/10/09 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python中pickle模块浅析
2020/12/29 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
毕业生优秀推荐信
2013/11/26 职场文书
应届毕业生自我评价分享
2013/12/15 职场文书
詹天佑教学反思
2014/04/30 职场文书
环境保护建议书
2014/08/26 职场文书
工作感想范文
2015/08/07 职场文书
高一语文教学反思
2016/02/16 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书