为什么会有内存对齐


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

面试题 相关文章推荐
Yahoo-PHP面试题2
Dec 06 面试题
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Mar 25 面试题
利用异或运算实现两个无符号数的加法运算
Dec 20 面试题
杭州时比特电子有限公司SQL
Aug 22 面试题
.net软件工程师面试题
Mar 31 面试题
.NET里面如何取得当前的屏幕分辨率
Dec 06 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
Jul 26 面试题
explicit和implicit的含义
Nov 15 面试题
C#怎么让一个窗口居中显示?
Oct 20 面试题
C#基础面试题
Oct 17 面试题
信号量和自旋锁的区别?如何选择使用?
Sep 08 面试题
Tomcat的缺省是多少,怎么修改
Apr 09 面试题
数组越界问题
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
关于crontab的使用详解
2013/06/24 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP的全局错误处理详解
2016/04/25 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python中文件操作简明介绍
2015/04/13 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
Python3 max()函数基础用法
2019/02/19 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
车间班组长岗位职责
2013/11/13 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
民主生活会汇报材料
2014/12/15 职场文书
导游词之桂林
2019/08/20 职场文书
我的收音机情缘
2022/04/05 无线电
vue中data里面的数据相互使用方式
2022/06/05 Vue.js
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS