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

时间:2015-03-11 02:32:30

标签: c++ c int int64

我注意到在C和C ++中,我们可以使用int64_t,或只使用long long

如果我使用这些类型编译 32位代码,我是否会在 64位和/或 32位计算机上遇到任何性能问题?

除了保存一些内存外,我是否有理由只使用int
毕竟,64位整数在存储大数字时更有用。

2 个答案:

答案 0 :(得分:9)

  

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

您的编译器可能需要生成多个机器代码指令才能对64位值执行操作,从而将这些操作减慢几次。如果这可能是一个问题,您需要进行一些基准测试,以评估使用实际数据对特定程序的影响。这个问题存在于32位或64位计算机上执行32位可执行文件的地方。

  

我是否有理由只使用int

除了性能和内存使用情况之外,偶尔有理由使用int,因为您使用的其他API /流等使用int。如果显而易见,使用int时也会有微妙的文件价值,否则其他程序员可能会浪费时间,想知道为什么你不想使用long long

  

毕竟,64位整数在存储大数字时更有用。

在存储非常大数字方面更有用 - 当然 - 但这是相对很少需要的。如果你存储了一年或某个年龄的东西,那么64位就没有特别的意义了。

答案 1 :(得分:6)

  

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

32位架构上的64位整数需要两个寄存器来存储值*。 32位值只需要一个寄存器。这很重要,因为:

  • 您可能会很快耗尽寄存器,要求寄存器溢出到内存中。这需要更多时间。
  • 加载和存储2个寄存器通常需要两个指令,而不是一个。
  • 对两个寄存器中的操作数进行加法或减法需要两个或更多指令,而只需一个寄存器中的一个操作数。

最重要的是,如果32位性能很重要,除非你需要,否则不要使用64位整数。

* x86,ARM和PowerPC处理器都是如此,它涵盖了目前人们编程的大多数处理器。大多数其他处理器也可能是这样。