if(variable==SOME_CONSTANT || variable==OTHER_CONSTANT)
在这种情况下,在平台上进行第二次测试的分支将花费更多的周期而不是简单地进行,优化器是否可以处理||作为一个简单的|?
解决方法In this circumstances,on a platform where branching over the second test would take more cycles than simply doing it,would the optimizer be allowed to treat the || as a simple |?
是的,这是允许的,实际上C#编译器将在某些情况下在&&和和||,将它们减少到&和|.如您所知,评估右侧必须没有副作用.
有关生成优化的详细信息,请参阅编译器源代码.
当逻辑 *** 作涉及提升到可空 *** 作数时,编译器也将执行该优化.例如,考虑一下
int? z = x + y;
其中x和y也可以为空;这将生成为
int? z;int? temp1 = x;int? temp2 = y;z = temp1.HasValue & temp2.HasValue ? new int?(temp1.GetValueOrDefault() + temp2.GetValueOrDefault()) : new int?();
请注意,它是&而不是&&我知道调用HasValue是如此之快,以至于不值得额外的分支逻辑来避免它.
如果你对我如何编写可空算术优化器感兴趣,我在这里写了一个详细的解释:https://ericlippert.com/2012/12/20/nullable-micro-optimizations-part-one/
总结以上是内存溢出为你收集整理的c# – 如果没有副作用,编译器/ JIT能否优化短路评估?全部内容,希望文章能够帮你解决c# – 如果没有副作用,编译器/ JIT能否优化短路评估?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)