【问题标题】:Does separating statements with commas instead of semicolons affect my program's speed?用逗号而不是分号分隔语句会影响我的程序速度吗?
【发布时间】:2011-02-04 20:26:18
【问题描述】:

我想知道这些样本中的任何一个是否比另一个“更快”。我知道差别不大,但我只是想知道有没有差别。

代码1:

a+b=c;
c=c*c;
d=c*a;

代码2:

a+b=c,c=c*c,d=c*a;

那么我使用,; 有什么关系?

只是问... :D

【问题讨论】:

  • 我怀疑不是。 (我假设第一行是向后的。)你知道你可以只看汇编代码。唯一真正的区别是第二种情况是一个表达式,因此它产生值d
  • 在这种情况下,它有助于比较编译器生成的程序集。当然,如果您想比较速度/说明,请使用您的发布构建设置生成它。
  • 为什么要问“哪个更快?”而不是问“哪个更具可读性?”
  • 我不是问哪个更快,我只知道有没有速度差异。我只是好奇xD

标签: c++ performance


【解决方案1】:

程序的行数并不代表它的速度。回答您的问题:不,您发布的两种表格之间的速度没有差异。如果您查看编译器为每个程序生成的汇编代码,您会发现它们完全一样。

How to read the assembly output of a C program

【讨论】:

    【解决方案2】:

    在速度方面没有区别。

    【讨论】:

    【解决方案3】:

    应该没有任何区别。但是,它完全取决于编译器。在查看生成的程序集之前,无法确定您的编译器/解释器是否根据您输入的不同代码生成了不同的程序集。

    在 Visual Studio 中,您可以像这样查看程序集: http://msdn.microsoft.com/en-us/library/a3cwf295.aspx

    一般来说,请记住,您用 C++ 编写的代码是由一个程序扫描的,该程序可以最好地决定如何为您生成程序集。所以在大多数情况下,像这样的语法糖会生成与较长版本相同的汇编代码。

    更重要的是,您应该停止担心这里的速度差异。如果速度是一个问题,请始终首先查看您的算法,早在像这样的微小差异之前。

    【讨论】:

    • 感谢您的回答。不,我并不担心程序的速度,只是......这个问题让我印象深刻:))。现在我可以睡个好觉了...:D
    【解决方案4】:

    一般来说,逗号操作符根本不需要,而且通常它只是用于编写令人困惑的代码以达到可疑的目标。例如,我不止一次看到这样的代码

    if (expression)
      statement1,
      statement2,
      statement3;
    

    只是为了“目标”为 { 和 } 保存一两行额外的行。

    我的建议:
    a) 干脆忘记逗号运算符的存在!
    b) 甚至不要考虑像这样的微优化,而是寻找真正的东西来优化可能是一个循环,或者被调用的 c-tors 的数量或消除对隐式转换运算符的调用。一个这样的优化将让你的程序真正受益。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      相关资源
      最近更新 更多