长整数能否在 32 位系统上工作

本文关键字:系统 工作 长整数 | 更新日期: 2023-09-27 17:49:58

如果我理解正确的话,一个 int 变量正在以 32 位保存,将其限制为 -20 亿到 20 亿。但是,如果我使用长变量,它将以 64 位保存,允许存储更多数字。我坐在 64 位系统上,但是如果我以 64 位存储数据,我的代码会在 32 位系统上运行良好吗?

谢谢!

长整数能否在 32 位系统上工作

你不用担心吗?long值将存储在 2 个内存地址中。 Int64/long将始终为64位,Int32/int将始终为32位。

有一些影响(关于内存空间和性能(,但最明显的可能是写入/读取操作在 32 位系统上不是原子的,但无论如何都不应该期望它们是原子的,因为 c# 规范没有这样的保证。

无论哪种方式,关键是:这不是您应该担心的事情 - CLR 将这些事情抽象出来。使用最适合您的类型。

在 32 位系统上,可以在单个机器寄存器中对 32 位整数执行操作。但是对 64 位整数的操作需要两个机器寄存器,并且效率远低于 32 位操作。当然,由于大小是两倍,long使用的内存比int多。如果您有这些类型的数组,那么如果您使用 long,您将以两倍的速度消耗缓存。这也可能会影响性能。

所以,如果你可以使用 int ,你应该更喜欢它而不是long。但是,如果int提供的 32 位范围不足以保证程序的正确性,则需要使用 long

当然,尽管对 64 位整数的操作在 32 位机器上执行时效率较低,但只有分析才能告诉您它是否真正重要。

也许底线是程序员不应该故意挥霍无度。如果 32 位就足够了,为什么要使用 64 位?

是的。两者都支持数据类型。但 64 位整数并非 32 位处理器的原生值。如果使用 64 位类型,并且仅编译为 64 位(可以选择 x64 或 x86(=32 位(作为 targer(,则编译器可能会使用特定的 64 位指令,从而使应用程序运行速度更快。从理论上讲,也就是说,在实践中您可能不会注意到这一点。

权衡是该应用程序不会在 32 位平台上运行。反之亦然。因此,如果您计划面向两个平台,则需要仅编译为 32 位,或者编译两次,每个平台编译一次。

对于long类型的可用性,这并不重要。您可以随时使用它。

你可以这样尝试自己:

Console.WriteLine(sizeof(long));

然后将其编译为x86而不是AnyCPU并运行它。您也可以在64位Windows上运行32位程序 - 看看结果是什么。

还有更大的数字类型,例如 BigInteger,它们也适用于 32 位和 64 位操作系统。