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

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 3986 | 回复: 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,如果不对齐,会导致读取操作需要分两次才能完成,效率太低。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP