所以我确实在stackvoerflow中找到了与此相关的一些答案,但没有人清楚地回答了这个
因此,如果我们的存储器是字节可寻址的,并且字大小是例如4字节,那么为什么不使存储器字节可寻址?
如果我没有误会CPU会用文字说话吗?所以当cpu试图从存储器中获取一个字时,从字节可寻址存储器获取4字节字与从字可寻址存储器获取字之间的区别是什么?
答案 0 :(得分:3)
如果我没有误会CPU会使用单词吗?
这取决于CPU实现的Instruction Set Architecture(ISA)。例如,x86支持大小不等的操作数,范围从单个8位字节到多达64个字节(在最新的CPU中)。虽然现代x86 CPU中的字大小仅为8或4个字节。字大小通常定义为等于通用寄存器的大小。但是,访问存储器或寄存器的粒度不一定限于字大小。从程序员的角度和CPU实现的角度来看,这非常方便,我将在下面讨论。
所以当cpu试图从内存中获取一个单词的时候是什么 从字节可寻址获取4字节字之间的区别 内存vs从单词可寻址内存中获取单词?
虽然ISA可能支持字节寻址能力,但实现ISA的CPU可能不一定一次从内存中获取数据。 Spatial locality of reference是一种在大多数真实程序中非常常见的内存访问模式。如果CPU要沿着内存层次结构发出单字节请求,则会不必要地消耗大量能量并显着损害性能以处理单字节请求并在层次结构中移动单字节数据。因此,通常,当CPU在某个地址发出某种大小的数据的存储器请求时,整个存储器块(称为高速缓存行,通常为64字节大小,64字节对齐)被带到L1缓存。对同一缓存行的所有请求可以有效地组合成单个请求。因此,存储器层次结构的不同级别之间的地址总线不必包括用于构成高速缓存行内的偏移的位的线。在这种情况下,实现将真正以64字节的粒度寻址内存。
但是,在实现中支持字节寻址能力会很有用。例如,如果只有一个字节的高速缓存行已经改变,并且高速缓存行必须写回主存储器,而不是将所有64个字节发送到存储器,则只需要更少的能量,带宽和时间来发送更改的字节(或几个字节)。字节可寻址性有用的另一种情况是首先为关键字提供支持。这还有很多,但为了简单回答,我会停在这里。
DDR SDRAM是当今大多数计算机系统中使用的主要存储器接口类。数据总线宽度为8字节,协议仅支持使用字节使能信号(称为数据掩码)传输对齐的8字节块,以选择要写入的字节。因此,主存储器通常是8字节可寻址的。它是CPU提供字节寻址能力的假象。
答案 1 :(得分:1)
内存通常是字节可寻址的。但是全字加载是可能的,并且在同一时间内获得4倍的数据。
如果单词load自然对齐,那么基本上没有区别;地址的低位为零而不是不存在。