为什么会有内存对齐


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的安全机制
Jun 28 面试题
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
Mar 14 面试题
金智子午JAVA面试题
Sep 04 面试题
下面这个程序执行后会有什么错误或者效果
Nov 03 面试题
南京软件公司的.net程序员笔试题
Aug 31 面试题
C#中有没有运算符重载?能否使用指针?
May 05 面试题
在c#中using和new这两个关键字有什么意义
May 19 面试题
进程的查看和调度分别使用什么命令
Mar 25 面试题
软件测试题目
Feb 27 面试题
50道外企软件测试面试题
Aug 18 面试题
EJB与JAVA BEAN的区别
Aug 29 面试题
几道Web/Ajax的面试题
Nov 05 面试题
数组越界问题
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 7.0.2 正式版发布
2016/01/08 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
python zip()函数的使用示例
2020/09/23 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
成品仓管员岗位职责
2013/12/11 职场文书
火箭队口号
2014/06/18 职场文书
小学生植树节活动总结
2014/07/04 职场文书
刘胡兰观后感
2015/06/16 职场文书
总经理致辞
2015/07/29 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android