这是其他编译器的常见问题(C#,VC++,GCC。)我想知道Delphi编译器的相同之处(任何版本;我是目前使用的是2010和XE2,很快就会使用XE4。)
我遇到了高性能代码的情况我正在编写需要检查条件的情况,但在大多数情况下不需要采取任何措施:
if UnlikelyCondition then
HandleUnlikelyCondition
else
HandleLikelyCondition
end;
通常不需要为可能的情况做任何事情:
if UnlikelyCondition then
HandleUnlikelyCondition
else
Exit
end;
我想向编译器暗示if
语句的第二个分支是要优化的那个。我怎么能在Delphi中做到这一点?
目前,我编写了我的代码,假设if
statement's condition equalling true是优化的最佳选择:
if LikelyCondition then
HandleLikelyCondition
else
HandleUnlikelyCondition
end;
或
if LikelyCondition then Exit;
HandleUnlikelyCondition;
在刚刚使用这两个示例中的第一个的测试中,我得到了50%的额外性能提升,重构我的if
这样的语句,即假设if
语句的条件为{{1} }。也许另一种表达问题的方法是,这是我能做的最好的吗?
如果您之前没有遇到过分支误预测,this epic answer is an illuminating read.
答案 0 :(得分:1)
语言或编译器中没有任何内容允许您提供分支预测的提示。在任何情况下,即使编译器发出包含提示的对象代码,现代架构也会忽略这些提示。