【发布时间】:2017-06-13 20:39:01
【问题描述】:
这是一个简单的问题,我不敢相信在此之前我没有想过阅读它......但我似乎无法找到正确的搜索词来找到答案,所以请多多包涵:
如果我有 60 条不同的 if 语句,请在整个班级中分布在多个方法中,如下所示:
if(myVar == 0.0f)
yaddayadda
if(myOtherVar == 0.0f)
yaddayadda
if(someVar == 0.0f || someOtherVar == 0.0f)
yaddayadda
...那些 0.0f 是否被放入内存并随后被 GC'ed,每次使用它们时?还是它们存储在编译后的代码中?我最好定义如下内容:
const float zero = 0.0f;
...并使用它来代替?如果是这样,从 const 获取值在 CPU 周期方面是否比直接将常量留在 if 语句中更昂贵?
我问,因为我可以看到 decimal 实际上有一个 decimal.Zero 常量,但 float 和 double 都没有。
【问题讨论】:
-
数字不存储在堆中。
-
没有为那些 if 检查分配内存,这只是一个比较。顺便说一句,用 0.0f (或任何确切的值,真的)检查相等性是不好的。浮点数不是很准确,因此最好检查您的变量是否低于某个阈值。
-
@SLaks 这个问题从不使用“堆”这个词。
-
过早的优化是万恶之源。在您对 GC 的工作原理和分析器有更深入的了解之前,不要担心。
-
@gilliduck:只有当它们具有可能需要更改的相同语义值(而不是零)时,这才是正确的。
标签: c# if-statement unity3d constants