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

时间:2013-08-11 06:41:52

标签: memory-management linux-kernel embedded-linux ram device-tree

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

memory {
    device_type = "memory";
    reg = <0x00000000 0x40000000>;  // 1GB at 0
};

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

0x40000000 = 1073741824(十进制)。

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

这意味着1073741824字节= 1GB。

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

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

2 个答案:

答案 0 :(得分:5)

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


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

下一代是使用大于8位的内部CPU寄存器开发的。它们通常是8位(16/32/64)的倍数,因为这允许它们从RAM一次读取多个完整字节。任何从RAM读取地址X的尝试都会导致获取2/4/8字节(在16/32/64位CPU上),即RAM中包含地址X的并且仅保留适当的字节并根据需要存储到内部CPU寄存器中。

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

有关详细信息,请查看由Ulrich Drepper撰写的全面article on CPU and memory

答案 1 :(得分:0)

您可能还会注意到内存地址(Arm DDR,PRU DDR,共享PRU DDR等)以及内存偏移都是以字节为单位,而不是处理器指令。 Bit Pusher