'if'功能在C++中具有可读性是否存在速度差异?
Is there a speed difference in 'if' functionizing for readability in C++?
例如:
bool IsPlayerOutMap()
{
bool t = (Player.x < 0 || Player.y < 0
|| Player.x > 1000 || Player.y > 1000);
return t;
}
if(IsPlayerOutMap())
cnt++;
和
if((Player.x < 0 || Player.y < 0
|| Player.x > 1000 || Player.y > 1000))
cnt++;
两种编码风格是否有速度差异?
基本上对于失败的"if"你有性能损失。由于CPU有执行管道(它开始执行下一个asm命令之前已经结束),当你输入一个"if"的CPU分支预测(你可以读到)选择执行路径之一(如果结果是"真"或"假"),如果它是错误的,那么exec停止在中间(用NOP取代命令-没有操作),并开始另一个路径,在这里你失去性能。
代码中的"if"代码和逻辑语句或多或少是相等的(您可以阅读"if快捷方式"来理解为什么)。但是,在这里调用另一个函数可能很重要。与评论中所说的不同,编译器并不总是将其内联(除非您指定带有标志),即使在某些情况下,内联代码更长,然后您可以在指令缓存中获得更多的缓存抖动(您可以阅读有关它)。
如前所述,这是微优化,最好的方法是使用profiler。从我的经验来看,这种小的优化只在非常特殊的情况下才有意义,例如,每秒处理10M数据包的路由器比每个纳米都重要。另一个点。总是在"if"代码周围加上大括号是一种更好的代码风格。不影响性能
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符