如果我理解它是正确的,int-variable以32位保存,将其限制为20亿到20亿.但是,如果我使用长变量,它将保存为64位,允许存储更多数字.我坐在64位系统上,但如果我将数据存储在64位,我的代码是否可以在32位系统上运行良好?
谢谢!
dca*_*tro 26
你不担心吗?该long值将存储在2个内存地址中.Int64/ long将始终为64位,并且Int32/ int将始终为32位.
有一些含义(关于内存空间和性能),但最明显的可能是写/读操作在32位系统上不是原子的,但你不应该指望它们是原子的,因为c#规范使得没有这样的保证.
无论哪种方式,重点是:这不是你应该担心的事情 - CLR将这些东西抽象出来.使用最适合您的类型.
在32位系统上,可以在单个机器寄存器中执行32位整数的操作.但是对64位整数的操作需要两个机器寄存器,并且比32位操作的效率要低得多.当然,两倍大小,long使用的内存比int.如果您有这些类型的数组,那么如果使用的话,您将使用两倍的缓存long.这也可能会影响性能.
所以,如果你可以使用int,你应该更喜欢它long.但是,如果提供的32位范围int不足以使程序正确,则需要使用long.
当然,即使64位整数上的操作在32位机器上执行时效率较低,但只有剖析才会告诉您它是否真正重要.
也许最重要的是,程序员不应该故意挥霍.为什么使用64位,如果32位就足够了?
是的。两者都支持数据类型。但 64 位整数并不是 32 位处理器所固有的。如果您使用 64 位类型,并且仅针对 64 位进行编译(您可以选择 x64 或 x86 (=32 位) 作为目标),则编译器可能会使用特定的 64 位指令,使您的应用程序运行得更快一些。从理论上讲,也就是说,在实践中你可能不会注意到这一点。
代价是该应用程序无法在 32 位平台上运行。反之亦然。因此,如果您计划针对两个平台,则需要仅编译为 32 位,或者编译两次,每个平台一次。
对于类型的可用性来说long并不重要。您可以随时使用它。