在C ++中,使用long over int有什么好处吗?
似乎long是x86和x86_64体系结构的默认字大小(x86上为32位,x86_64上为64位,而int上为32位),这在理论上应该在进行算术时更快。
C ++标准保证sizeof(int)< = sizeof(long),但似乎long是32位和64位系统上的默认大小,所以应尽可能长时间使用而不是int在尝试编写可在两种架构上移植的代码时?
答案 0 :(得分:5)
long
至少为32位,而int
仅保证至少为16位。在编写完全可移植的程序时,您可以使用long
,int
的保证大小不足以满足您的需求。
但实际上,很多人都隐含假设int
大于标准保证,因为它们只针对这些平台。在这些情况下,它通常不重要。
int
应该是系统数字的“自然”大小;理论上long
可能会更昂贵,但在许多架构上,即使long
实际上长于long
,int
上的操作也不会更加昂贵。
答案 1 :(得分:4)
如果您需要在不同平台上保持相同大小的整数类型,则需要<stdint.h>
中的类型。
例如,如果您绝对需要32位无符号整数,则需要uint32_t
。如果您绝对需要64位有符号整数,则需要int64_t
。
答案 2 :(得分:1)
什么是更快,什么不是更难以预测每天。原因是处理器不再“简单”,并且所有复杂的动态和算法背后的最终速度可能遵循完全违反直觉的规则。
唯一的出路就是衡量和决定。还要注意,更快的取决于细节,即使对于兼容的CPU,对一个人的优化也可能是对另一个人的悲观。对于非常关键的部分,某些软件只是在程序初始化期间尝试并检查运行时不同方法的时序。
那就是说,作为一般规则,你可以拥有的更快的整数是int
。您应该仅在需要时使用其他整数(例如,如果long
更大并且您需要更高的精度,或者short
更小但足够并且您需要节省内存)。
如果您需要特定尺寸,则更好,然后使用固定的标准类型或添加typedef
,而不是只在您需要的地方洒long
。通过这种方式,可以更轻松地支持不同的编译器和体系结构,并且对于将来要阅读代码的人来说,意图也会更加清晰。