解释为什么在 c++ 中应该首选 int 而不是多头/空头

Explanation for Why int should be preferred over long/short in c++?

本文关键字:空头 int c++ 为什么 解释      更新时间:2023-10-16

我在某处读到,无论操作系统如何,int 数据类型都能提供更好的性能(与长短相比(,因为它的大小会根据操作系统的字大小进行修改。其中,长和短占据 4 和 2 个字节,可能与操作系统的字大小匹配,也可能不匹配。谁能对此给出一个很好的解释?

从标准
:3.9.1, §2 :

有五种有符号整数类型: "符号字符", "短整数", "整数", "长整"和"长长整"。在 此列表,每种类型至少提供 与之前的存储一样多 在列表中。普通整数具有 建议的自然大小 执行的体系结构 环境 (44(;另一个签名 提供整数类型以满足 特殊需求。

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

现在对于您的问题,大多数编译器将 int 与其目标平台的寄存器大小对齐,这使得对齐更容易,并且在某些平台上访问速度更快。但这并不意味着你应该更喜欢int。
根据需要选择数据类型。不要在没有性能测量的情况下进行优化。

int传统上是运行程序的机器最"自然"的积分类型。 "最自然"是什么意思还不太清楚,但我希望它不会比其他类型的慢。 也许更重要的是,在没有充分理由的情况下,几乎普遍使用int而不是其他类型的传统。 使用其他整数类型会导致有经验的C++程序员在阅读代码时询问原因。

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

  2. 不确定 int 应该优先于多头;显而易见的情况是 int 的容量不够用

你已经提到了本地单词大小,所以我就不说了

据报道,

爱斯基摩人使用四十多个不同的词来表示雪。当你只想传达它是雪时,那么"雪"这个词就足够了。源代码不是关于指导编译器:它是关于人类之间的交流,即使交流可能只是在你现在和以后的自己之间......

干杯和呵呵。

int不能

提供比其他类型更好的性能。实际上,在大多数现代平台上,所有整数类型的性能都相似,除了long long。如果您想要平台上可用的"最快"整数,C++ 没有为您提供执行此操作的方法。

另一方面,如果你愿意使用 C99 定义的东西,你可以使用那里定义的"fastint"类型之一。

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

最后,我建议不要使用 int 作为默认数据类型。通常,我看到人们在真正想要一个无符号整数时会伸手去找int。从有符号到无符号的转换可能会导致细微的整数溢出错误,从而导致安全漏洞。

不要因为固有的"速度"而选择数据类型 - 选择正确的数据类型来解决您要解决的问题。