2.2.4. 数据的存储和排列

2.2.4. 数据的存储和排列

bing 2.2.4. 数据的存储和排列

 2.2.4. 数据的存储和排列

 2.2.4. 数据的存储和排列

棒棒哒加油哦(๑•̀ㅂ•́)و✧买!~

 各位同学大家好,在这个小节中,我们要探讨的是数据的存储和排列的问题,好首先来看一个之前提到过的问题叫做大小端模式,我们在内存里经常会存储某一些多字节的数据,比如说C语言里的应急性变量啊,在很多时候是占4个字节,这我们用16进制的方式把4个自己的内容给描述出来,那最左边这个部分我们可以把它称为最高有效字节,然后最右边6期我们可以把它称为最低有效字节啊,英文缩写也要注意分别是MSB和LSB听起来像是骂人的话,好那如果把这个四字节的N字形变量大家可以试一下,把它翻译为十进制的话,应该对应的是这样的一个数,这样的一个啊政治数,而如果把这个16进制数啊,翻译成二进制的形式,那么就应该是下面这样的内容,总共有32.5个4个字节啊,那之前我们说过对于这种连续的几个字根据这些。已成二进制的形式,那么就应该是下面这样的内容,总共有32个比特,4个字节好,那之前我们说过,对于这种多字节的数据,它在内存里边一定是占据连续的几个字节的,那根据这些字节在内存里的排列方式不同,我们可以有两种存储这种多自己数据的方式,一种较大端,一种叫小端方式,那大端方式的存储会更符合我们人类阅读的习惯啊,这儿我们上面给的0800X08012指这些指的是内存地址,所以左边是内存的低地址,部分到右边是内存的高地址部分,因此所谓的大端模式就是把最高的有效字节把它存到更低壁纸的部分,然后最低有效,自己也是存在了最高的这个地质部分,整个硬体型变量占据连续的4个字节,那这是大端存储的方式,它小端方式就是把它逆过来这是在最高有效自荐的方式。奥迪车的部分存储最高有效资金是逆过来存储的,那小端方式显然不太符合我们阅读的习惯,我们要阅读这个四字节数据的时候,得把它逆过来拼凑,那虽然小段方式不方便让我们阅读,但是它更方便让机器进行处理,因为我们的机器在处理这种多字节数据的时候,通常也是按照这种内存地址递增的次序啊,来来读取这个多字节数据里面的这些每一个字节或者每一个字的,也就是说机器在读取这4个字节的int型变量的时候,如果他们每次只能读取一个字母的话,那么他先读出的一定是第1季这部分的这个字节,那如果用大端方式的话,就相当于先把最高有效资金给投入,然后一直往后到最后才投入最低有效资金,而如果是小端模式,就意味着它会先读入这个最低有效资金慢慢的这么做是有好处的比如如果我们的cpu他每一次只能处理吧we一个加两个变量进行。处理8位二进制的一个加法运算,那么当CPU对两个inch型变量进行加法操作的时候,显然应该先从它的最低有效字节先进行加法,然后再加次DV的这个字节,所以如果使用小端方式来诠释的话,那计算机首先从内存里读了,就是最初最应该先被处理的这个字节,所以小端存储的方式会更便于机器的处理啊,那这是大端方式和小端方式的一个区别,好接下来再探讨一个问题叫做边界对齐的准确方式啊,现在的计算机通常是按照字节编制,所谓按字节编制就是指每一个字节会对应一个地址,那如果结合下面这个图的话,第1个字节我们可以把它编制,内存地址对应的是0,然后第2个字节对应的内存地址是1,第3个对应的是2,那么第4个我们对应的是3,然后呢,在这个图里面除了字节之外,大家还会发现半字和字这样的一种描述方式,呃,假设这个计算机它的存储资产存储资产为32倍吗一个字十二个比特每一个棒子就是。3号那在这个图里面,除了自己之外,大家还会发现半字和字这样的一种描述方式啊,假设这个计算机它的存储字长存储字长为32位,那么一个字就是32个比特位,然后一个伴字就是16个比特,现在计算机虽然是按照字节编制,但是通常来说也可以支持暗自或者按半字来进行寻址的操作,什么意思呢?比如说一条指令它可以指名,我要访问的是内存里地址编号为4的这个自己,那么由于我要寻找的是一个字节,所以最终找到的应该是这样,我们画出的这个自己这个自己的编号刚好类似好,那这是按自己的巡诊那什么叫按半字巡诊,比如我同样可以指定我这次要访问的是编号为3的那个半字,那么由于一个半字是16个比特,所以最开始的两个字节组成了0号半字,然后接下来的这两个字节组成了1号半字然后在这两个资金二。那么由于一个半字是16个比特,所以最开始的两个字节组成了0号半字,然后接下来的这两个字节组成了1号班字,然后再往后的这两个字节组成了2号板子,接下来的两个字节又组成了编号为3的班子,所以如果我要暗示我都指明了,我要访问的是3号贩子,那么就意味着接下来要做的的就是这个目标实现的就是自寻址蛋按字寻址的元力,有的事也就是四八亿的4个字组成了一个字因此我。那大家会发现,这样我们一个班一共5个人有一个人,不过我的这个人的文章,他还是按你的工作怎么把它综合成一只对应的自己提升呢?我们只需要把你的逻辑左移两位就可以因为逻辑做一位意味着乘以2为柘城的,就像刚才这个例子当中第1个字节,我们把编号为0,然后接下来第2行第1个资金编号应该是4,然后再往后的这个资金编号应该是8接下来,这个字节编号应该是12,这是每一行的一节的一个二级目标,然后现在现在我要访问第二和R的那个字,也就是要访问第3行的这一整个字,那我们要把这个字地址抓完之后,用自己描述的地址,那你看啊,看到后来才啊,他用二进制表示的话应该是一音对吧,我们把它标记出一两类,就相当于在末尾又添了两个0,那这个二进制翻译过来就应该是8所以二号字的骑士地址就是从。又添了两万零那这个二进制翻译过来就应该是吧,所以2号字的骑士地址就是8号自己这个位置,从8号自己开始读出连续的4个字节,这就是拉投资的,那半子的原理也是一样,我们给出办法来的字节地址为1000一个0就可以噢,那这是。8号自己开始读出连续的4个字节,这就是2号字的内容,那半字的元力也是一样,我们给出半自动学逻辑,左移移位也就是在末尾签一个名就可以好,那这是按字按半字还有按字节寻址的意思,现在计算机都是按字节编制的,也就是说无论我们要访问的是字半字还是字节,最终肯定需要转换成呃相对应的字句,那转换方法,就是如果我们还是要强调一个事情,我们每次保存只能读写一个字的那个不写这儿所谓的一个字就是我们这儿的一整行不能跨行读取,所以基于这种特性有的计算机会采取数据边界对齐的方式,也就是我们上面这个图的这种方式也有的计算机会采用编辑不对齐的方式,也就是下面这种方式啊,来举个例子两个字型的变量四个字如果我定义了一个结构。但是妈呀,我的战绩如果我定义了一个结构的话,这个结构体里面包含了三个叉型的变量,然后三个手机呢要有一个异性的面量,那如果按边界对接的方式,我们在完成了刚开始的三个查询变量之后,最开始的这一个字还会剩下一个字节的空间,但是接下来我们要存储的设计性变量它必须占一个半左右的,是两个字节,所以如果采用的是边界不对齐的方式,那么我们可以把这个short型的变量第1个字节就放在这一个字的末位这个地方,然后数形变量的第2个字节把它放到第2个字最开始的这个地方,可能几年之前我们提到的东西就是访存相关的那个特性,我们可以知道,如果按照这种边界不对齐的方式来存储的话,那就意味着当我们要读出这个short型变量的时候这种方案我们必须进行两次方程最上面这一整个字的内容而第二次的内容。下边这种方案我们必须进行两次访存,因为第1次访者我们读入的是最上面这一整个字的内容,而第2次访问我们才能读入第2个字的内容,只有把这两个字的内容都读入,然后把最末尾的这个字节和最开头的这个字节进行一个拼接,我们才可以得到short型变量的一个完整的表示,而如果采用上面这种边界对齐的方式来存储的话,最后这样我们只剩一个字节存不下这个半字的数据,那我们就会干脆把这一个字节给浪费掉,虽然说空间上能会有一些浪费,但是当我们要读入这个short型变量的时候,只需要进行一次访存就可以,因为这个变量的所有数据都是存放在这一整个字里边的,好,所以这就是边界对齐方式和边界不对齐方式的一个对比,那显然边界对齐方式它是一种空间换时间的一种策略,虽然我们会浪费某一些空间浪费这种的效率所以这种策略值得的。虽然我们会浪费某一些空间,但是浪费这些存储空间,可以啊,换来更快的这种放存的效率,所以边界对其的这种存储策略也是值得的,好的,那由于这个小节只有两页PPT,那我们就不再进行专门的总结了,那一看就是这些,我觉得全部内容各位同学大家好,通过之前几个。