为什么整数变量大小被限制到 32/64 位等?

问题描述

为什么内置 Integer 变量类型(以及其他一些数字原语)的大小限制为 32 或 64(很少达到 128)位,即使在更现代的语言中,例如 {{3} } 或 Swift?我意识到在过去内存严重受限的时代,限制可变大小是有意义的,但现在我们拥有数以亿计的内存,为什么要将自己限制在如此相对较小的数字上呢?就此而言,是什么阻止我们像动态调整数组大小那样动态调整数值变量的大小?

我承认我不太了解计算机/编译器如何在低级别处理变量,但我没有看到为什么这些限制是它们的任何具体原因(除非可能是数学运算所需的内存呈指数级增长?)

解决方法

任何物理上实现的计算机都是由真实硬件制成的。硬件就是它——它由金属、塑料和玻璃制成,以某种方式排列。有专门用于执行加法、减法等运算的专用电路。

用于存储某个数字的内存量可以在运行时确定。也许您需要 4 位,也许需要 64,也许您需要用一千或一百万位数字来表示数字。没关系;如果您为系统添加足够的内存,您就可以表示这些内容。然而,处理数字的硬件——金属、塑料、玻璃和电路——不能以同样的方式扩展。您不能简单地添加更多晶体管或将它们拿走以对更小或更大的数字进行加法运算。您必须选择硬件基本适用的最大尺寸;它可以是任何特定号码,虽然它可以是任何号码,但它必须是特定。一旦选择,就是它。

这就解释了为什么选择任何数字。一个必须是。但是,为什么不选择更大的数字呢?我想这里有一个实际问题,并且硬件理解的最大无符号整数大小通常与可用内存空间量有关。当 4GB 的内存超过程序所需的内存时,就没有固有的需要大于 2^32 的数字。使用 64 位无符号整数,我们现在可以引用大约 1700 万 GB;如果相对于虚拟内存地址空间的大小而言,这变得不够(如果现代应用程序设计的趋势继续下去,也许我们会到达那里!),我认为我们都可以合理地假设新的 128 位架构将成为常态。

这可能不是问题的另一个原因是通用业务处理和商业应用程序通常不需要如此大的数量;因此,那些将计算机用于这些应用程序的人,可能不是技术人员,他们的需求得到了满足。另一方面,对如此大的数字可能有用的技术用户已经足够了解如何解决硬件限制,因此需求并不那么紧迫(通常也可能没有经济上的合理性;经济上还有多少?取决于 JavaScript 显示下一个广告或 ACH 转移如期发生,而不是依赖基础研究的经济部分继续顺利?是的,研究的长期收益是真实的,但这不会影响本季度的损益).

,

在计算机体系结构的工程过程中,必须就计算机将要使用的数据块(位计数)类型达成一致。正如帕特里克所说,一旦工程师确定了某个数字,就无法更改。您可以从 Wikipedia 中找到许多不同的位宽,即 https://en.wikipedia.org/wiki/45-bit_computing。 32 位和 64 位计算刚刚为广大受众推广,因此它们正在 PC 上使用。