长整数能否在 32 位系统上工作
本文关键字:系统 工作 长整数 | 更新日期: 2023-09-27 17:49:58
如果我理解正确的话,一个 int 变量正在以 32 位保存,将其限制为 -20 亿到 20 亿。但是,如果我使用长变量,它将以 64 位保存,允许存储更多数字。我坐在 64 位系统上,但是如果我以 64 位存储数据,我的代码会在 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 位操作系统。