c#中'(ulong) 1'比'1ul'慢吗?

问题描述 投票:0回答:1

我一直使用

(ulong) 1
来表示 64 位数据类型中的 1 位。我想知道
(ulong) 1
是否会进行某种类型转换并且比
1ul
花费更多时间。

只是好奇这是否有什么不同。我认为它们的性能完全相同。这是正确的,还是

(ulong) 1
实际上更慢?

c# type-conversion ulong
1个回答
1
投票

不,当您使用编译时常量和内置数字转换(即

(ulong) 1
)进行强制转换时,不会发生运行时类型转换,因为编译器可以处理此类事情,并且两种方法都应产生相同的IL/ASM。例如:

var x = 1ul;
var y = (ulong)1;
Console.WriteLine(x);
Console.WriteLine(y);

将产生相同的IL

.maxstack 1
    .entrypoint
    .locals init (
    [0] uint64 x,
    [1] uint64 y
)

IL_0000: ldc.i4.1
IL_0001: conv.i8
IL_0002: stloc.0
IL_0003: ldc.i4.1
IL_0004: conv.i8
IL_0005: stloc.1
IL_0006: ldloc.0
IL_0007: call void [System.Console]System.Console::WriteLine(uint64)
IL_000c: nop
IL_000d: ldloc.1
IL_000e: call void [System.Console]System.Console::WriteLine(uint64)
IL_0013: nop
IL_0014: ret
© www.soinside.com 2019 - 2024. All rights reserved.