4.2 主存中的数据组织
一、 存储字长
存储字长:主存中的一个存储单元包含的二进制位数;
目前大多数计算机的主存按照字节编址,存储字长也不断增加,如16位字长、32位字长和64位字长;
对于64位字长来说,主存的一个单元能存放64位二进制数;
正是因为主存按字节编址,而存储字长也有多种,因此指令集结构的设计要考虑如下两个问题:
- 如何根据字节地址读取一个32位的字? (字的存存储)
- 一个字能否存放在储存的任何字节边界? (字的边界对齐问题)
这里科普一下计算机中的一些名词:字、字长、字节、位;
位:表示一个二进制数码0或1;
字节:一个字节由8个位组成,是存储容量的单位;
字:计算机处理数据时,一次存取、加工和传送的数据长度称为字;
字长:计算机的每个字所包含的位数称为字长;
二、数据存储与边界的关系
(1)按边界对齐的数据存储
假设在32位系统中,定义有如下变量:
int i, short k, double x, char c, short j;
其中int32位,short16位,double64位,char8位;
各变量的地址为:
&i = 0, &k = 4, &x = 8, &c = 16, &j = 18;
图示,显示了单字边界(变量i)、双字边界(变量x)、半字边界(变量j和k)和字符边界(变量c)边界对齐时的存储方式;
边界对齐存放可能会导致部分空间的浪费(图示空白空间没被使用);
(2)未按边界对齐的数据存储
还是在32位系统中存储之前的那些变量;
各变量的地址为:
&i = 0, &k = 4, &x = 6, &c = 14, &j = 15;
之前未被使用的空间被利用起来了;
但是,该存储方式虽然节省了空间,但是增加了访存次数;
(例如:如果要访问变量x,对齐的存储方式中只用访问两次,未对齐的存储方式需要访问三次)
到底是用对齐的数据存储还是用未对齐的数据存储,要在性能和容量之间做衡量;
(3)边界对齐与存储地址的关系(以32位为例)
单字长边界对齐的其实地址的末二位为00(4字节的整数倍, 二进制表示)
半字长边界对齐的起始地址的最末一位为0(2字节的整数倍,二进制表示 )
三、大端与小端存储方式
大端存放:最高字节地址(MSB)作为数据地址;
小端存放:最低字节地址(LSB)作为数据地址;
由于数据有大端和小端两种存放模式,所以在程序运行的时候,要关注是哪一种模式;
大佬计组看的啥mooc啊? 推荐一手呀
我看的是华科的mooc,不太好啃
是我太菜了QAQ
哦哦可以的,我就看王道的
peter太强了!
还是sjjj更厉害些QWQ
加油啊学长!!!!!!Keep on going never give up
加油加油٩(๑^o^๑)۶