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

Memory management 内存地址是否指向一个字节的信息?,memory-management,linux-kernel,embedded-linux,ram,device-tree,Memory Management,Linux Kernel,Embedded Linux,Ram,Device Tree,以下是DTS文件的摘录。 linux/arch/powerpc/boot/dts/[board_name].dts memory { device_type = "memory"; reg = <0x00000000 0x40000000>; // 1GB at 0 }; 嵌入式设备有1 GB内存 0x40000000=1073741824(十进制) 获得1GB的唯一方法是将1073741824计算为字节 这意味着1073741824字节=1GB 那么这是否意味着

以下是DTS文件的摘录。 linux/arch/powerpc/boot/dts/[board_name].dts

memory {
    device_type = "memory";
    reg = <0x00000000 0x40000000>;  // 1GB at 0
};
嵌入式设备有1 GB内存

0x40000000=1073741824(十进制)

获得1GB的唯一方法是将1073741824计算为字节

这意味着1073741824字节=1GB

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

为什么会这样?我们读一个8位的块是什么?为什么一个字也不说呢;DR:RAM访问不是字节大小的块,即使每个字节都是独立可寻址的,并且在RAM中有自己的地址

第一个真正成功的微处理器,成为了数字革命的主流,因此其基本数据块为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的这篇综合文章。

您可能还注意到,内存Arm DDR、PRU DDR、共享PRU DDR等的地址加上内存偏移量都是以字节为单位的,而不是以处理器指令为单位的。
钻头推进器

传统。数字革命始于。在某种程度上,答案是隐含在所使用的术语中的——你说的是千兆字节,而不是千兆字。感谢编码员的澄清。因此,每个字节都可以独立寻址,但在访问地址时可以读取多个字节,相应的字节保留在CPU寄存器中。谢谢你提供更多的细节和漂亮的解释。你真是太棒了。我不会说最初的处理器是8位的——它们不是,因为有更小和更大字号的例子。但事实是,真正起飞的微处理器设计是8位的,这有助于建立某种语言。在像ARM这样的干净表体系结构中,您看到的8位传统要比在具有向后兼容性的体系结构(如x86 ARM)中看到的少一些,因为它倾向于缺少对未对齐word access.Hmmm的支持。没错。更新了我的回答以强调这一点。Re Drepper的论文:曾经有一段时间,所有的计算机和处理器都没有网络接口,因为这些设备在1970年代之前还没有发明出来。20世纪70年代和80年代的小型计算机首次引入了低成本计算机的概念,并为微处理器、微型计算机和个人计算机奠定了基础,其字号可寻址12或16位,例如DEC PDP8和DG Nova@编码员——你对CPU和处理器的使用似乎只意味着微处理器。这些术语不能互换。