我只是想知道,通过说32位机器和64位机器,机器中到底由32(64)位组成的是什么,所以我们将其定义为32(64)位机器。由于我目前正在学习 C,我发现指针和内存之间的关系很好地解释了这一点。由于一个内存地址指向一个字节,所以如果内存地址由32位组成(即指针为4个字节),那么它最多可以有2^32种可能性,这意味着它最多可以表示2^32个字节,即导致 32 位机器最多支持 4GB RAM。这是公平的假设吗?那么32位机还是64位机是由内存地址大小来定义的呢?
此外,如果机器是32位的,那么该机器上C中的指针总是4个字节(32位)吗?
最佳答案
在现代、高性能、通用的 CPU(读取、x86)中,N 位架构区别是指架构上首选的整数运算所操作的数据宽度。这些 CPU 包含许多不同大小的寄存器,但有些可以将多个数据值打包到一个寄存器中,就像使用 SIMD 指令一样。
内存地址空间和这种 N 位架构区别之间的关系仅仅来自这样一个事实:一旦 32 位可以容纳在单个寄存器中,内存偏移计算就可以在单个周期内执行,并且 32 位似乎足够的地址空间可预见的 future 。最终,可预见的 future 结束了,现在我们在 64 位地址空间中使用 64 位值执行内存偏移计算。
这种与地址空间的关系有些任意,并且基于这样的事实:这些值变得足够大以提供合理的内存量。例如,在 12 位小型机中,内存不限于 (2^12) 4096 字节,内存地址只是跨越多个寄存器,并且偏移计算需要多个周期。如今,一些 8 位微 Controller (微波炉中常见的类型)也采用了同样的方法。它们可以通过将地址存储在两个寄存器而不是一个寄存器中来提供 16 位地址空间、64kB 内存。
所以,除非你使用的是非主流CPU,否则你可以考虑N位区分地址空间。然而,即使在今天,也有一些情况无法体现这一点。例如,如上所述,微 Controller 以及可能使用“非常大指令字”的特定领域或 super 计算架构,可以被视为“2048 位 CPU”,但很可能在 64 位地址空间中运行。
关于c - 什么定义机器为 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971587/