C++ 为什么int在64位编译器上通常是32位的?
为什么C++ 为什么int在64位编译器上通常是32位的?,c++,compiler-construction,int,sizeof,platform,C++,Compiler Construction,Int,Sizeof,Platform,为什么int在64位编译器上通常是32位的?当我开始编程时,我被教导int通常与底层架构的宽度相同。我同意这也是有道理的,我发现一个未指定宽度的整数与底层平台一样宽是合乎逻辑的(除非我们讨论的是8位或16位的机器,在这里,int的如此小的范围几乎不适用) 后来我了解到,在大多数64位平台上,int通常是32位的。所以我想知道这是什么原因。对于存储数据,我更喜欢显式指定的数据类型宽度,因此这就留下了int的通用用法,它不提供任何性能优势,至少在我的系统上,我对32位和64位整数具有相同的性能。因此
int
在64位编译器上通常是32位的?当我开始编程时,我被教导int通常与底层架构的宽度相同。我同意这也是有道理的,我发现一个未指定宽度的整数与底层平台一样宽是合乎逻辑的(除非我们讨论的是8位或16位的机器,在这里,int
的如此小的范围几乎不适用)
后来我了解到,在大多数64位平台上,
int
通常是32位的。所以我想知道这是什么原因。对于存储数据,我更喜欢显式指定的数据类型宽度,因此这就留下了int
的通用用法,它不提供任何性能优势,至少在我的系统上,我对32位和64位整数具有相同的性能。因此,这就留下了二进制内存占用空间,虽然不会减少很多,但会略微减少…int
s在大多数主要体系结构上已经是32位了,因此将它们更改为64位可能会导致比它解决的问题更多的问题。因为使用64位整数对许多软件没有好处
使用64位整数来计算可以用32位整数计算的东西(在许多情况下,高达40亿(或+/-2十亿)的值就足够了),而将它们变大也不会有任何帮助
但是,使用更大的整数会对处理器缓存中适合多少整数大小的“东西”产生负面影响。因此,将它们变大将使涉及大量整数(例如数组)的计算花费更长的时间,因为
<>代码> int >代码>机器字的自然大小不是C++标准规定的。在大多数机器使用16位或32位的时候,将其设置为16位或32位是有意义的,因为对于这些机器来说,这是一个非常有效的大小。当涉及到64位机器时,这不再“有帮助”。因此,使用32位int
更有意义
编辑:
有趣的是,当微软移动到64位时,他们甚至没有将
long
64位,因为它会破坏太多依赖long
作为32位值的东西(或者更重要的是,他们有一大堆东西依赖于long
作为API中的32位值,有时客户端软件使用int
,有时使用long
,他们不希望这种情况发生。).主要原因是向后兼容。此外,已经有64位整数类型long
,浮点类型也是如此:float
和double
。为不同的体系结构更改这些基本类型的大小只会带来复杂性。此外,32位整数在性能方面满足许多需求范围。实施者的错误选择
严格地说,根据标准,“普通INT具有
执行架构建议的自然大小
“环境”,这意味着64位上的64位int
你可以很容易地说,其他任何东西都是
不一致。但在实践中,问题更为复杂:
不允许从32位int
切换到64位int
大多数程序都可以处理大型数据集或任何东西(与
从16位切换到32位);大多数程序可能是
受到其他因素的限制。这将增加
数据集的大小,从而减少局部性并降低速度
程序关闭
最后(可能也是最重要的),如果int
是64位,
short
必须为16位或
32位,您将无法指定另一位(除了
使用
中的typedef,目的是
应仅在非常特殊的情况下使用)。
我怀疑这是主要的动机。因为还没有人指出这一点
int
保证在标准要求的-32767到32767(2^16
)之间。如果您想在所有平台上支持64位数字,我建议使用正确的long
类型,它支持(-9223372036854775807到9223372036854775807)
int
可以是任何类型,只要它提供了标准要求的最小范围。C++标准没有说明int类型应该使用多少内存,而是告诉您至少int类型应该使用多少内存。在许多32位指针变量的编程环境中,“int”和“long”都是32位长。历史、权衡和决策由开放组在解释。它涵盖了各种数据模型、它们的优缺点以及为适应64位计算而对Unix规范所做的更改。我最初写这篇文章是为了回应。虽然我对它做了一些修改,但主要是sa我
首先,可以使用大于32位的纯整数,如下所示:
注:普通整数旨在具有执行环境的体系结构建议的自然大小;提供其他有符号整数类型是为了满足特殊需要- 尾注
重点矿山
在我的64位体系结构(以及其他所有人的体系结构)上,这表面上似乎是这么说的普通整数应该有64位大小;这是体系结构建议的大小,对吗?但是我必须声明,即使64位体系结构的自然大小也是32位。规范中的引用主要针对需要16位普通整数的情况——这是规范允许的最小大小
最大的因素是惯例,从32位体系结构到32位纯整数,如果将源代码保留为32位,那么将其改编为64位体系结构就简单多了,对于设计师和他们的用户来说,这两个dif都是32位的