在32位应用程序中使用64位整数是否可行?

15

我注意到在 C 和 C++ 中,我们可以使用 int64_t 或者简单地使用 long long

如果我使用这些类型来编译 32位代码,在 64位 和/或 32位机器 上会有性能问题吗?

除了节省一些内存外,是否有理由只使用 int 呢?毕竟,64位整数在存储大数字方面更有用。


4
在32位应用程序中使用64位整数是可以的。32/64位代码指的是指针长度,而不是普通数据类型的长度,因此对于像int64_t这样的类型使用并没有影响。 - timleathart
一台64位机器仍然可以在特殊的32位模式下运行32位代码,因此64位指令将不可用。32位足以覆盖-2147483648到2147483647的范围,如果您需要更多,则会发现“double”更加有用。 - Mark Ransom
64位乘法在32位和64位机器上的速度肯定比32位乘法慢很多。 - user3528438
https://dev59.com/IW035IYBdhLWcg3wQtog?rq=1 - phuclv
2个回答

15
如果使用这些类型编译32位代码,在64位和/或32位机器上执行操作时,会出现性能问题吗?你的编译器可能需要生成几个机器代码指令来执行64位值的操作,从而使这些操作变慢几倍。如果这可能是一个问题,您需要进行一些基准测试,以评估对具有真实数据的特定程序的影响。在32位机器或64位机器上执行32位可执行文件时存在这个问题。
除了性能和内存使用外,偶尔需要使用int,因为您使用的其他API /流等使用int。如果使用int很明显就足够了,则使用int还具有微妙的文档价值,否则其他程序员可能会浪费时间去想为什么您要费尽心思地使用long long。
毕竟,64位整数在存储大数字方面更加有用。但只有在需要存储非常大的数字时才更加有用-当存储一年或某人的年龄等内容时,没有特别使用64位的点。

我想这一切都有意义。 - Nyaarium

11
如果我使用这些类型编译32位代码,是否会在64位和/或32位机器上遇到性能问题? 在32位架构上使用64位整数需要两个寄存器来存储值*。而32位值仅需要一个寄存器。这很重要,因为:
- 您可能会更快地用完寄存器,需要将寄存器溢出到内存。这需要更多的时间。 - 加载和存储2个寄存器通常需要两条指令,而不是一条。 - 对两个寄存器中的操作数进行加法或减法需要两个或更多的指令,而对于只有一个寄存器中的操作数,则只需要一条。
总之,如果32位性能很重要,则不要使用64位整数,除非您需要它们。
*这适用于x86、ARM和PowerPC处理器,覆盖了大多数人这些天编程的处理器。这也可能适用于大多数其他处理器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接