c - 什么定义机器为 32 位

标签 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位)吗?

最佳答案

在现代、高性能、通用的 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/

相关文章:

c++ - 如果其他程序在 64 位 Windows 中使用过多,32 位程序是否会内存不足?

.net - 已安装 VSTO x64 运行时但找不到

c - 使用指针打印结构中的最小值和最大值

复制C多维数组

architecture - KendoUI 与 Telerik 架构差异

ruby-on-rails - 如何整合多个rails应用并共享资源

c - 获取段错误而不是打印结构值

c - 如何在 MSVC 中访问 libsndfile-1.dll 中的函数?

asp.net - 我们是否应该在 DotNetNuke 平台上构建我们的下一代 Web 应用程序?

c# - 将应用程序从 32 位移动到 64 位