繁体   English   中英

是否可以删除此条件语句?

[英]Is it possible to remove this conditional statement?

我正在为一个简单的游戏编写求解器,当我分析代码时,这些行占用了40%的CPU时间(通过针对Release版本运行时通过Visual Studio探查器)。

unsigned int notVisited, move; // initialized outside of this code
bool pathFree = (notVisited & move) == move;
if (pathFree) successors |= move;

我怀疑实际的减速是该行下方的分支,并且进行优化编译导致其找到错误的行。 所有这些都发生在一个循环中,每个函数调用运行大约10次。 是否有一些魔术可以执行上述行而无需分支?

这也许吗?

successors |= (move & -((int) pathFree));

如果pathFree为false,则(int) pathFree为0,因此整个右侧为0,而|=不执行任何操作。

如果pathFree为true,则(int) pathFree为1,取反为-1,因此所有位均为1,因此整个右侧求move

我怀疑它会更快。 在这两种情况下,您最终都要进行一次内存写操作,如果条件为假,以前可以避免这种情况。

可悲的是,在将编译器的代码和建议版本的汇编输出,其设置及其所有周围的代码进行比较之前,此处给出的任何答案对您都没有任何实际意义。

仅从代码简洁性的角度讲,我喜欢Pete Becker的评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM