技嘉v/s Gibibyte & 千兆v/s Gibibit

hag*_*wal 5 java byte operating-system 32-bit memory-address

请注意:我知道这些差异,所以这个问题不是要知道它们之间的区别,而是为了别的东西。

我把我的理解和知识(对于那些不知道的人)放在下面,这些知识来自可靠的信息来源。

  1. 所有这些都是数字信息字节的倍数单位。
  2. Gigabyte 和 Gigabit 是十进制表示法,分别代表字节和位的 10 次方。

    • 千兆字节 = 10^9 字节 (GB)
    • 千兆 = 10^9 位(Gb 或 Gbit)
  3. Gibibyte 和 Gibibit 用于二进制表示法,分别表示字节和位的 2 次幂。

    • Gibibyte = 2^30 字节 (GiB)
    • Gibibit = 2^30 字节 (Gibit)
  4. 为了符号,字节将始终表示为 B,位将始终表示为 b。

据我所知,以上信息属实。

下面是引用,可以在很多地方看到,包括Wiki 32-bitStackoverflow 32 bit等。 如下所示,32 位内存地址可以访问 4 GiB(这意味着 4 gibibyte 而不是 4 gibibit字节可寻址内存。

因此,具有 32 位内存地址的处理器可以直接访问 4 GiB 的字节可寻址内存。

问题:
我真的很困惑(实际上快疯了)2^32内存地址如何访问 4 gibi字节的可寻址内存?不应该是 4 Gibibit 或 0.5 Gibibyte 吗?
1 字节有 8 位,所以如果我们用字节来谈论内存,那么 2^32 位是不是意味着 0.5 Gibibyte 或 4 Gibibit?

我的意思是 2^32 位如何表示为 4 GiB 或 4 Gibibyte?它不能是某种约定,因为字节和位不能像这样播放。所以,有一个正当的理由。
如果有 2^32 个内存地址并且每个存储 1 个字节,那么这意味着我有 2^32 * 2^3 = 2^35 位内存。然后它不再是 2^32,而是 2^35。不?

PS:我不是CS毕业生所以请原谅我。

ass*_*ias 2

2^32 = 4294967296 - 因此在 32 位架构上,您可以在内存中达到 40 亿个地址。每个地址存储一个字节(8 位)。

所以你的“最大内存”确实是 2^32 字节或 4 x 2^30 字节或 4 GiB。

  • 32 位是内存地址的大小 - 但位于该内存地址的内容始终是一个字节(在通常的体系结构上)。因此,在 16 位 CPU 上,您可以达到 2^16 *字节* 的内存 - 在 32 位 CPU 上,您可以达到 2^32 *字节* 的内存。等等,我不确定我是否理解您不清楚的部分...... (2认同)