内存地址是否指向一个字节的信息?

New*_*ils 0 ram memory-management linux-kernel embedded-linux device-tree

以下是DTS文件的摘录.LINUX /拱/的PowerPC /引导/ DTS/[board_name] .dts

memory {
    device_type = "memory";
    reg = <0x00000000 0x40000000>;  // 1GB at 0
};
Run Code Online (Sandbox Code Playgroud)

嵌入式设备有1 GB的内存.

0x40000000 = 1073741824(十进制).

我得到1 GB的唯一方法是当我计算1073741824作为字节.

这意味着1073741824字节= 1GB.

这是否意味着0x00000000指向RAM中的一个字节数据?换句话说,RAM中的每个字节都有一个地址.

为什么会这样?我们读了8位块?为什么不说一句话?

The*_*ist 6

TL; DR:RAM访问不是字节大小的块,即使每个字节在RAM中可独立寻址(有自己的地址).


第一个真正成功的微处理器,以"数字革命"为主流,是8位,因此8位基本数据块的传统一直持续到今天.在具有8位CPU的第一代微处理器中,RAM中的每个字节都被单独读取/写入.

下一代是使用大于8位的内部CPU寄存器开发的.它们通常是8位(16/32/64)的倍数,因为这允许它们从RAM一次读取多个完整字节.任何尝试读取地址X从RAM将导致提取2/4/8个字节(16/32/64位CPU)的即包含的地址X和只有适当的字节被保留并存储在CPU内部寄存器在RAM按要求.

接下来,随着CPU缓存的出现,RAM开始以缓存行大小的块读取(并写入).它们甚至比寄存器的大小还要大.这将减少由于数据局部性而从RAM读取数据的延迟.

有关详细信息,请查看 Ulrich Drepper 关于CPU和内存的综合文章.