在C中,哪个更快:如果有回报,或者如果有回报?

Cla*_*diu 0 c optimization performance conditional

if if是否更好,如果if语句中的每个块都返回,或者是否更好地拥有ifs链?具体而言,如果最快的话:

A:

if (condition1) {
  code1;
  return a;
}
if (condition2) {
  code2;
  return b;
}
//etc...
Run Code Online (Sandbox Code Playgroud)

B:

if (condition1) {
  code1;
  return a;
}
else if (condition2) {
  code2;
  return b;
}
//etc...
Run Code Online (Sandbox Code Playgroud)

Mik*_*els 43

它没有任何区别,这是对微优化的不必要的尝试.

  • 它甚至不是微优化.这是一个0优化. (6认同)
  • 你不能总是假设理智的编译器.通常当人们询问速度时,他们使用的是嵌入式系统和糟糕的编译器.它发生在我身上不止一次.世界比x86和ARM系列更大.当然,嵌入式程序员可以只编译两者并查看生成的操作码并执行时序. (4认同)
  • @Nosredna:是的,但如果我们假设编译器是疯了,我们就不能说没有看到OP正在使用的确切编译器的输出.未能指定您在OP中使用的确切体系结构/编译器意味着您可以使用涵盖理论/逻辑/正常/理智情况的答案. (2认同)

pax*_*blo 14

C标准没有规定基于C代码创建的机器语言.如果您了解底层架构,有时可以做出假设,但即使这是不明智的.

过去很久以前,CPU就是简单的野兽,因为它们具有流水线,多级缓存和各种其他奇妙的东西,可以将速度提升到极限.

在您遇到特定问题之前,您不应该担心这种级别的优化(有些人会说"完全").

编写代码以使其可读.

这应该是规则1,2和3.您认为哪个是软件开发中最大的问题,代码以最高速度的99.5%运行,或者开发人员花费数天时间试图找出和/或修复同事(甚至是同事)自己)六个月前呢?

我的建议是只有当你发现问题时才会担心性能,然后在目标平台上进行基准测试,看看哪里可以获得最大的改进.if通过在代码中的其他地方选择更好的算法,语句的1%改进可能相形见绌(其他事情,例如代码被调用的次数,当然是相同的).应始终针对优化进行优化,以获得最佳效果.