为什么会有内存对齐


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面试题笔试题
Oct 02 面试题
NULL是什么,它是怎么定义的
May 09 面试题
上海微创软件面试题
Jun 14 面试题
Hashtable 添加内容的方式有哪几种,有什么区别?
Apr 08 面试题
四川internet信息高速公路(C#)笔试题
Feb 29 面试题
几个Linux面试题笔试题
Aug 01 面试题
linux面试题参考答案(11)
Nov 26 面试题
Linux如何压缩可执行文件
Mar 27 面试题
海量信息软件测试笔试题
Aug 08 面试题
Python如何定义一个函数
Sep 01 面试题
如何防止同一个帐户被多人同时登录
Aug 01 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
Feb 16 面试题
数组越界问题
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常用技巧总结(附函数代码)
2012/02/04 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
解决laravel session失效的问题
2019/10/14 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
使用Python的内建模块collections的教程
2015/04/28 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python生成器以及应用实例解析
2018/02/08 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
jupyter notebook 重装教程
2020/04/16 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
函授毕业自我鉴定
2013/12/19 职场文书
英文请假条
2014/04/11 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
商业融资计划书
2014/04/29 职场文书
委托书格式要求
2015/01/28 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
XX部保密工作制度范本
2019/08/27 职场文书