gpt4 book ai didi

Int32 文字到 float 的 C# 性能损失

转载 作者:行者123 更新时间:2023-11-30 13:32:08 25 4
gpt4 key购买 nike

在 C# 中,您可以将数字字面量定义为 int 或 double

    Double var1 = 56.1;
int var2 = 51;

这些是文字分配的默认类型。然而,我正在开发的游戏引擎使用 float 来表示位置、旋转等。当 float 被分配为 double 字面值时,即 float varFloat = 75.4; 编译器会抛出一个错误,指出双文字需要是一个 float ,这是正确的。所以需要将双字面量变成 float ,即。 float varFloat = 75.4f;。但是,当给定一个 int 文字时,int 会隐式转换为 float。即,

    float varFloat = 44; // This is fine.

我的问题是,编译器是否足够聪明,可以意识到 44 应该是一个 float ?如果不是,则意味着每次访问文字时,它也在执行转换。在大多数情况下,这真的无关紧要。但是对于高性能代码,如果到处使用整数而不是 float ,它可能会成为一个问题(即使它是一个小问题)。据我所知,如果不通过源代码行,就无法将这些文字更改为 float ,这实际上根本不值得花时间。

那么,编译器是否将int字面量转换为float字面量?如果不是,除了设法避免这种浪费处理能力之外,还能做些什么?

最佳答案

答案是肯定的。它足够聪明,知道这一点。

这是具有此类分配的简单程序的反汇编 IL(由 ILSpy 提供)。如你所见from the ldc.r4 instruction ,没有发生转换:

.method private hidebysig static 
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 8 (0x8)
.maxstack 1
.entrypoint
.locals init (
[0] float32 x
)

IL_0000: nop
IL_0001: ldc.r4 44
IL_0006: stloc.0
IL_0007: ret
} // end of method Program::Main

关于Int32 文字到 float 的 C# 性能损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16170290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com