忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2207 | 回复: 6

[操作系统] 32位CPU一次可读取32位内存数据,所以需要地址以4字节对齐为什么? [复制链接]

论坛徽章:
0
发表于 2016-04-08 22:53 |显示全部楼层
32位CPU一次可读取32位内存数据,所以需要地址以4字节对齐为什么?

32位CPU要一次读取32位内存数据,是因为数据线是32位,但是一次读取,是不是要求只取一次内存地址,但是一个内存地址不是只对应8位(1字节吗),那它是怎么做到一个内存地址对应32位的,还是要取4次内存地址,但是这不就不是一次取32位数据而是8位数据了吗?

我真的很疑惑,请大神解惑,还有这个问题是不是涉及到存储区扩展(按位,按字)?

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
发表于 2016-04-09 23:41 |显示全部楼层
随便找份外挂DRAM的硬件原理图就明白了。

论坛徽章:
0
发表于 2016-04-11 13:13 |显示全部楼层
首先内存地址是32位的,如0x00000000~0xffffffff;每一个地址存放一个字节的数据;
至于取出的数据是多少位取决于数据类型,比如,如果是int类型的数据,那么一次读取四个字节的数据,即从当前地址到往后三个地址的数据组成一个数据读出;
如果是char类型的变量,一次只读取一个字节的数据。

论坛徽章:
0
发表于 2016-04-14 14:34 |显示全部楼层
每条指令都是不同的,CPU会根据编译出来的指令来执行不同的操作,4个字节的读取也是一次性完成的,当在执行读取4个字节的数据时,32位地址总线的低2位全是0,所以需要地址对齐,如果不对齐,硬件上可能会出现异常或者其它情况。

论坛徽章:
0
发表于 2016-12-15 10:37 |显示全部楼层
其实学过8051的人就可以解释这个问题,不同位宽的访存指令会使能不同宽带的数据总线。

另外,对于32-bit cpu,这个问题没这么简单,因为RAM与cpu之间还有CACHE,RAM CONTROLLER,对于WB type memory region,cpu不会直接与RAM通信而是直接访问CACHE

论坛徽章:
6
2015年迎新春徽章
日期:2015-03-04 09:48:00IT运维版块每日发帖之星
日期:2015-06-11 22:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00数据库技术版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2015-12-24 06:20:00IT运维版块每日发帖之星
日期:2016-04-15 06:20:00
发表于 2016-12-15 13:26 |显示全部楼层
32位CPU,4字节=4*8=32bit,如果不对齐,会导致读取操作需要分两次才能完成,效率太低。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票6.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP