为什么int应该优先于c ++中的long / short?

时间:2011-06-27 11:10:43

标签: c++ performance operating-system types int

我在某处读到int数据类型提供了更好的性能(与长和短相比),无论操作系统的大小如何根据操作系统的字大小进行修改。长短占用4个和2个字节,可能与OS的字大小匹配,也可能不匹配。 任何人都可以对此做出很好的解释吗?

5 个答案:

答案 0 :(得分:4)

从标准:
3.9.1,§2:

  

有五种有符号整数类型:   “signed char”,“short int”,“int”,   “long int”和“long long int”。在   这个列表,每种类型至少提供   与之前一样多的存储空间   在列表中。平原有   建议的自然尺寸   执行的架构   环境(44);另一个签了   提供整数类型以满足   特殊需要。

所以你可以说char< = short< = int< = long< = long long。
但是你不能说短路是2字节而是4字节。

现在问题,大多数编译器将int与目标平台的寄存器大小对齐,这使得对齐更容易,并且可以更快地访问某些平台。但这并不意味着你应该更喜欢int 根据您的需要获取数据类型。如果没有绩效衡量标准,请不要进行优化。

答案 1 :(得分:4)

int传统上是程序运行的机器上最“自然”的整数类型。 “最自然”的意思并不太清楚,但我希望它不会比其他类型慢。或许,更重要的是,当没有其他强有力的理由时,使用int优先于其他类型的传统几乎是普遍的传统。使用其他整数类型将导致有经验的C ++程序员在阅读代码时询问原因。

答案 2 :(得分:2)

据报道,爱斯基摩人使用了四十个或更多不同的词来表示雪。当你只想传达它的雪时,那么“雪”这个词就足够了。源代码不是指导编译器:它是关于人类之间的通信,即使通信可能只是在你当前和稍后的自我之间...

干杯&第h

答案 3 :(得分:1)

  1. 简称仅优化存储大小;如果适用,计算总是扩展为int(即,除非short已经是相同的大小)

  2. 不确定int应该优先于long;显而易见的情况是当int的容量不够时

  3. 你已经提到了原生的单词大小,所以我会留下那个

答案 4 :(得分:1)

int没有比其他类型提供更好的性能。实际上,在大多数现代平台上,除long long外,所有整数类型的表现都相似。如果您希望平台上提供“最快”的整数,C ++不会为您提供这样做的方法。

另一方面,如果您愿意使用C99定义的内容,您可以使用其中定义的“fastint”类型之一。

此外,在现代机器上,在大多数情况下,内存层次结构比CPU计算更重要。使用较小的整数类型可以使更多的整数适合CPU缓存,这将在几乎所有情况下提高性能。

最后,我建议使用int作为默认数据类型。通常,当人们真正想要无符号整数时,我会看到人们到达int。从signed到unsigned的转换可能导致细微的整数溢出错误,这可能导致安全漏洞。

不要因为内在的“速度”而选择数据类型 - 选择正确的数据类型来解决您想要解决的问题。