![4 GB 怎么会等于 32 位内存地址?](https://linux22.com/image/1566946/4%20GB%20%E6%80%8E%E4%B9%88%E4%BC%9A%E7%AD%89%E4%BA%8E%2032%20%E4%BD%8D%E5%86%85%E5%AD%98%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
请原谅我问出这个问题,太天真了。
4 GB 怎么会等于 32 位内存地址呢?如果我没记错的话,4GB * 1024 * 1024 * 1024 = 4,294,697,296 字节内存单元。那么,既然 1 字节 = 8 位,那么我们为什么不将其乘以 8 以将其转换为位呢?
答案1
因为逐位寻址内存没有任何实际意义。一次请求一个字节的内存比逐位请求要快得多,也更有效率。
CPU 处理数据的内部操作时间以纳秒为单位。选择内存地址、等待该地址的数据出现在总线上以及随后可用所需的时间长达微秒(慢了几个数量级)。
假设你需要 8 倍的延迟才能获得一个完整的字节可用的如果您使用位寻址,则会导致不合理的额外工作量和数据获取延迟。在等待数据位到达的过程中,您的程序实际上处于停滞状态。
通过使用更大的基本单位(字节),我们将数据访问时间缩短了不到一个数量级,并一次传输更多有用的数据。
这本来可能是选择使用字节进行内存寻址的最初原因。
为了简单起见,我们仍然使用字节寻址,它仍然是一个非常有用的小数据块,但现代内存现在以突发方式传输更大的数据块以保持性能,因为我们已经超越了传输单个字节“高效”的程度。