为什么会有内存对齐


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 session
Apr 21 面试题
Tomcat Mysql datasource数据源配置
Dec 28 面试题
说出数据连接池的工作机制是什么?
Apr 19 面试题
介绍Ibatis的核心类
Nov 18 面试题
什么是java序列化,如何实现java序列化
Nov 14 面试题
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
Aug 25 面试题
什么是索引指示器
Aug 20 面试题
extern是什么意思
Mar 10 面试题
广州喜创信息技术有限公司JAVA软件工程师笔试题
Oct 17 面试题
你们项目是如何进行变更控制的
Aug 26 面试题
简单叙述一下MYSQL的优化
May 09 面试题
J2EE是技术还是平台还是框架
Aug 14 面试题
数组越界问题
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
获得Google PR值的PHP代码
2007/01/28 PHP
php中iconv函数使用方法
2008/05/24 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
python让函数不返回结果的方法
2020/06/22 Python
python与pycharm有何区别
2020/07/01 Python
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
SQL数据库笔试题
2016/03/08 面试题
linux面试题参考答案(9)
2016/01/29 面试题
中国入世承诺
2014/04/01 职场文书
微笑服务演讲稿
2014/05/13 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
毕业感言怎么写
2015/07/31 职场文书
小学记事作文之200字
2019/08/06 职场文书