什么将机器定义为32位

时间:2014-02-23 17:19:06

标签: c architecture 32bit-64bit

我只是想知道通过说32位机器和64位机器,它究竟是由机器中的32(64)位组成,以便我们将其定义为32(64)位机器。由于我正在学习C,我发现指针与内存之间的关系解释了这一点。由于一个存储器地址指向一个字节,因此如果存储器地址由32位组成(即指针是4个字节),则它最多可以有2 ^ 32个可能性,这意味着它最多可以表示2 ^ 32个字节,导致32位机器支持最多4GB RAM。这是公平的假设吗?那么32位或64位机器是由其内存地址大小定义的吗?

此外,如果一台机器是32位的,那么该机器上的C指针总是4个字节(32位)?

4 个答案:

答案 0 :(得分:1)

没有任何内容表明ALU,地址总线和数据总线的宽度都必须相同。因此,没有关于它意味着什么的正式定义,例如32位。

答案 1 :(得分:1)

在现代的,高性能的,通常可用的CPU(读取,x86)中,N位架构区别是指由架构上优选的整数运算操作的数据的宽度。这些CPU包含许多不同大小的寄存器,但是,有些可以将多个数据值打包到一个寄存器中,就像使用SIMD指令一样。

存储器地址空间与这种N位架构区别之间的关系只是因为一旦32位可以装入单个寄存器,就可以在一个周期内执行存储器偏移计算,并且32位看起来像是足够的地址空间可预见的未来。最终,可预见的未来到期,现在我们在64位地址空间中使用64位值执行内存偏移计算。

这种与地址空间的关系有些随意,并且基于这些值变得足够大以提供合理数量的内存的事实。例如,在12位小型机中,存储器不限于(2 ^ 12)4096字节,存储器地址简单地跨越多个寄存器并且偏移计算花费不止一次循环。今天使用的方法与一些8位微控制器相同,您可以在微波炉中找到它。它们可以通过将地址存储在两个寄存器而不是一个寄存器中来提供16位地址空间,64kB的存储器。

因此,除非您处理非主流CPU,否则您可以考虑将N位区分为地址空间。但是,即使在今天也存在这种情况,这些情况并未映射。例如,如上所述的微控制器,以及可以使用"非常大的指令字"的域特定或超级计算体系结构,可以被认为是" 2048位CPU"但最有可能在64位地址空间中运行。

答案 2 :(得分:0)

  

此外,如果一台机器是32位的,那么该机器上的C指针   总是4个字节(32位)?

您可以使用自动多路复用器仅使用32位来寻址12GB。(非常低效,因为只有1/3的周期访问4GB区域)

  *****************************************************************
  Multiplexer clock cycle1



                            first 4GB
  32-bit wide addressing     /
 ---------------------------M----
                             \

  *************************************************************
  Multiplexer clock cycle2




  32-bit wide addressing     /
 ---------------------------M----- second 4GB
                             \


  **************************************************************
  Multiplexer clock cycle3




  32-bit wide addressing     /
 ---------------------------M-----
                             \
                           third 4GB

在说明书设计中,您可以:

 waitFor(multiplexer%3==0)write value to address;// you know this writes to first 4GB region
                                            //blocks until multiplexer is ready
  waitFor(multiplexer%3==1)write value2 to address;// you know this writes to second 4GB region
                                             //blocks until multiplexer is ready
  waitFor(multiplexer%3==2)write value3 to address;// you know this writes to last 4GB region
                                            //blocks until multiplexer is ready

 Multiplexer value can be accessed by a cpu register easily.

所以,答案是否定的。它可能小于32位。

答案 3 :(得分:0)

现代操作系统和计算机使用称为虚拟内存的构造。每个程序(进程)都认为它拥有完整的RAM。实际上,RAM在许多并发进程中共享。

通常,您在编译器中看到的“地址”不等于RAM中的地址或物理地址(PA)。它取而代之的是“虚拟地址”(VA)。操作系统与您的处理器一起将VA转换为PA。

为什么这样?因为您的RAM通常太小而无法通过64位或32位进行寻址。 2 ^ 64是Zetabytes!没有RAM那么大!将RAM视为硬盘的高级缓存:当我们需要使用它们时,我们只将当前运行的程序的一小部分从磁盘转移到RAM中。

如果您所需的程序不在RAM中,则会触发“页面错误”,从磁盘将所需数据带入RAM,并从RAM中取出一些旧的未使用数据。

回答您的问题:您的计算机可以处理的RAM量(几乎)完全独立于虚拟地址的长度(以位为单位)。以带有128 GB RAM的服务器机架为例。 RAM的所有好处是什么?!这样做的好处是,您可以并行运行多个进程,并且运行速度非常快。

这是计算机体系结构中的一个重要主题。阅读有关虚拟内存,分页和页表以及内存组织的内容,以便更好地理解。

希望这有帮助!