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

Is it ok to use 64bit integers in a 32bit application?

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

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

除了节省一些 RAM,我还有理由只使用 int 吗?
毕竟,64 位整数在存储大数方面更有用。

If I compile 32bit code using these types, will I suffer any performance issues on 64bit and/or 32bit machines?

您的编译器可能需要生成多条机器代码指令来对 64 位值执行操作,从而使这些操作减慢数倍。如果这可能是一个问题,您需要进行一些基准测试,以使用实际数据评估对特定程序的影响。当您在 32 位或 64 位计算机上执行 32 位可执行文件时,就会出现该问题。

would I ever have a reason to just use int?

除了性能和内存使用之外,偶尔也有理由使用 int,因为您使用的其他 APIs/streams 等使用 int。如果 int 明显足够的话,使用 int 也有微妙的文献价值,否则其他程序员可能会浪费时间想知道你为什么特意使用 long long.

After all, 64bit ints are far more useful in storing large numbers.

在存储 非常 大数字方面更有用 - 当然 - 但这相对很少需要。如果您要存储诸如一年或某个人的年龄之类的信息,那么使用 64 位就没有什么特别的意义了。

If I compile 32bit code using these types, will I suffer any performance issues on 64bit and/or 32bit machines?

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

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

底线是,如果 32 位性能很重要,请不要使用 64 位整数,除非您需要 them.s

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