我在某处读到int数据类型提供了更好的性能(与长和短相比),无论操作系统的大小如何根据操作系统的字大小进行修改。长短占用4个和2个字节,可能与OS的字大小匹配,也可能不匹配。 任何人都可以对此做出很好的解释吗?
答案 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)
简称仅优化存储大小;如果适用,计算总是扩展为int(即,除非short已经是相同的大小)
不确定int应该优先于long;显而易见的情况是当int的容量不够时
你已经提到了原生的单词大小,所以我会留下那个
答案 4 :(得分:1)
int
没有比其他类型提供更好的性能。实际上,在大多数现代平台上,除long long
外,所有整数类型的表现都相似。如果您希望平台上提供“最快”的整数,C ++不会为您提供这样做的方法。
另一方面,如果您愿意使用C99定义的内容,您可以使用其中定义的“fastint”类型之一。
此外,在现代机器上,在大多数情况下,内存层次结构比CPU计算更重要。使用较小的整数类型可以使更多的整数适合CPU缓存,这将在几乎所有情况下提高性能。
最后,我建议使用int
作为默认数据类型不。通常,当人们真正想要无符号整数时,我会看到人们到达int
。从signed到unsigned的转换可能导致细微的整数溢出错误,这可能导致安全漏洞。
不要因为内在的“速度”而选择数据类型 - 选择正确的数据类型来解决您想要解决的问题。