C++;整型与长型 在C++中,使用长IN?有什么好处?

C++;整型与长型 在C++中,使用长IN?有什么好处?,c++,C++,看起来,long是x86和x86_64体系结构的默认字长(x86上为32位,x86_64上为64位,而int在两者上均为32位),这(理论上)在执行算术时应该更快 C++标准保证SIEZOF(int)代码>长保证至少32位,而> INT/COM>仅保证至少16位。编写完全可移植的程序时,如果int的保证大小不足以满足您的需要,则可以使用long 然而,在实践中,许多人都暗中假设int大于标准保证,因为他们只针对这样的平台。在这些情况下,这通常并不重要 int应该是系统中数字的“自然”大小;理论

看起来,long是x86和x86_64体系结构的默认字长(x86上为32位,x86_64上为64位,而int在两者上均为32位),这(理论上)在执行算术时应该更快


C++标准保证SIEZOF(int)代码>长保证至少32位,而> INT/COM>仅保证至少16位。编写完全可移植的程序时,如果

int
的保证大小不足以满足您的需要,则可以使用
long

然而,在实践中,许多人都暗中假设
int
大于标准保证,因为他们只针对这样的平台。在这些情况下,这通常并不重要


int
应该是系统中数字的“自然”大小;理论上,
long
可能更昂贵,但在许多体系结构上,
long
上的操作并不昂贵,即使
long
实际上比
int
长,如果需要在不同平台上保持相同大小的整数类型,则需要
中的类型


例如,如果绝对需要32位无符号整数,则需要
uint32\u t
。如果您绝对需要一个64位有符号整数,那么您需要
int64\t

什么更快,什么不更快,每天都变得越来越难预测。原因是处理器不再“简单”,在所有复杂的动力学和算法背后,最终速度可能会遵循完全违反直觉的规则

唯一的出路就是衡量和决定。还要注意的是,什么是更快的取决于小细节,甚至对于兼容的CPU,什么是一个优化可能是另一个悲观。对于非常关键的部分,一些软件只是在程序初始化期间的运行时尝试并检查不同方法的计时

这就是说,作为一般规则,可以得到的更快的整数是
int
。仅当您特别需要时才应使用其他整数(例如,如果
long
更大,您需要更高的精度,或者如果
short
更小但足够大,您需要节省内存)


如果您需要特定的尺寸,则最好使用固定的标准类型或添加
typedef
,而不是在需要的地方喷洒
long
。这样可以更容易地支持不同的编译器和体系结构,而且对于将来阅读代码的人来说,目的也更明确。

在Windows上,
long
为32位。在Linux上,
long
是64位。这打断了很多申请。相关:同意。但是请尽可能少地使用
xintX\t
类型。如果将代码移植到一个不太宽容的CPU体系结构中,这些可能会严重影响性能。@wallyk:当然,由于对类型大小的假设不再成立,代码有缺陷会对性能造成更大的伤害,因此我宁愿冒着性能损失的风险来处理有缺陷的代码(当然,代码不应该对类型的大小做出比标准所保证的更多的假设,但这种情况仍然经常发生)