32 位到 64 位跳过 48 位?

Mat*_*ado 5 operating-systems 64-bit 32-bit computer-architecture cpu-architecture

计算机体系结构从 16 位升级到 32 位再到 64 位。跳过 48 位的逻辑是什么?使用什么推理升级到 64 位而不是其他指数?

下表说明: 2^32 比 2^16 大 65536 倍。所以使用 2^48 是合乎逻辑的,它也是 2^32 的 65536 倍。相比之下,使用 2^64 似乎是一个巨大的飞跃。(在 amd64 推出 10 年后,台式计算机的销售内存为两位数 GB RAM,而服务器使用三位数 GB RAM。)

    2^16                        65.536
    2^32                 4.294.967.296  2^16 X 65536
    2^48           281.474.976.710.656  2^32 X 65536
    2^64    18.446.744.073.709.600.000  2^32 X 4294967296
Run Code Online (Sandbox Code Playgroud)

在下面编辑

我使用了在线十进制到二进制转换器,并得到了这些结果。显然,2^48 用 48 个二进制 1 达到最大值。

    1111111111111111                      65535  2^16 - 1 (16 ones)
    10000000000000000                     65536  2^16

    11111111111111111111111111111111                    4294967295  2^32 - 1 (32 ones)
    100000000000000000000000000000000                   4294967296  2^32

    111111111111111111111111111111111111111111111111            281474976710655 2^48 - 1 (48 ones)
    1000000000000000000000000000000000000000000000000           281474976710656 2^48

    1111111111111111111111111111111111111111111111111111111111111111    18446744073709551615    2^64 - 1 (64 ones)
    10000000000000000000000000000000000000000000000000000000000000000   18446744073709551616    2^64
Run Code Online (Sandbox Code Playgroud)

Ton*_*nny 9

64 位是下一个逻辑步骤。

原因主要是因为对于以不同大小本地运行的系统,在软件和硬件中很容易处理将位数加倍(或一半)的步骤。在 64 位 CPU 可用之前,32 位系统已经在内部例行处理 64 位值。

例如:32 位系统可以通过将 64 位数字存储在 2 个 32 位变量/寄存器中来轻松处理它。
处理 48 位数字很尴尬:您需要同时使用 32 位和 16 位变量,或者仅使用 32 位变量的一部分或使用 3 个 16 位变量。这些针对 48 位的解决方案都不是最佳的。

一般而言:任何以 X 位工作的系统都可以轻松处理 (N * X) 和 (X / N) 的大小,其中 N 是 2 的幂。所以逻辑是 1、2、4、8、16、32 、64、128、256、512 等。
所有其他尺寸都需要更复杂的硬件和/或软件处理,因此不是最佳的。

因此,当在硬件架构中寻求更大的位大小时,使用相同的进程是有意义的,因为它只需要对操作系统、软件和编译器进行少量更新即可支持新的位大小。

(这一切都适用于 CPU 寄存器的本机位大小。当您考虑寻址 RAM 芯片的“地址线数量”时,您可能确实会看到较小的数字,那么对于架构来说是自然的。在
内部,这些 CPU 使用更多位,但并非所有位都连接到实际地址线。
例如:8088 和 8086 cpu 上的 20 行,80286 上的 20 行和 Pentium II 上的 36 行)