为什么会有内存对齐


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

面试题 相关文章推荐
新浪网技术部笔试题
Aug 26 面试题
空字符串(“”)和null的区别
Nov 13 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 面试题
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
Oct 06 面试题
Android面试题及答案
Sep 04 面试题
几道数据库的面试题或笔试题
May 31 面试题
北京-环亚运商测试题.net程序员初步测试题
May 28 面试题
Linux如何压缩可执行文件
Oct 21 面试题
一些Unix笔试题和面试题
Sep 25 面试题
abstract class和interface有什么区别
Aug 04 面试题
这76道Java面试题及答案,祝你能成功通过面试
Apr 16 面试题
一套Delphi的笔试题二
May 11 面试题
数组越界问题
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
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
浅析JS运动
2015/12/28 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
int在python中的含义以及用法
2019/06/27 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
UNIX文件系统分类
2014/11/11 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
优秀员工表扬信
2014/01/17 职场文书
工作违纪检讨书
2014/02/17 职场文书
物业消防安全责任书
2014/07/23 职场文书
担保贷款承诺书
2015/04/30 职场文书
入党转正申请报告
2015/05/15 职场文书
2015年共青团工作总结
2015/05/15 职场文书
毕业欢送会致辞
2015/07/29 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js