为什么会有内存对齐


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

面试题 相关文章推荐
关键字final的用法
Oct 02 面试题
北京银河万佳Java面试题
Mar 21 面试题
凌阳科技股份有限公司C++程序员面试题笔试题
Nov 20 面试题
经典c++面试题六
Jan 18 面试题
Android面试题附答案
Dec 08 面试题
武汉东之林科技有限公司机试
Sep 17 面试题
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
Sep 29 面试题
广州某公司软件工程师面试题
Dec 22 面试题
Java中会存在内存泄漏吗,请简单描述
Dec 22 面试题
Java的类可以定义为Protected或者Private得吗
Sep 25 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Jul 27 面试题
JSF的标签库有哪些
Apr 27 面试题
数组越界问题
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原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
vue-router传参用法详解
2019/01/19 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
python中threading超线程用法实例分析
2015/05/16 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python numpy元素的区间查找方法
2018/11/14 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
python字符串的拼接方法总结
2019/11/18 Python
python ftplib模块使用代码实例
2019/12/31 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
Python如何急速下载第三方库详解
2020/11/02 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
考试作弊检讨书大全
2014/02/18 职场文书
房屋委托书范本
2014/04/04 职场文书
推广活动策划方案
2014/08/23 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
介绍一下28个JS常用数组方法
2022/05/06 Javascript
volatile保证可见性及重排序方法
2022/08/05 Java/Android
JavaScript实现音乐播放器
2022/08/14 Javascript