【问题标题】:Which one is faster in the following cases? [closed]在以下情况下哪个更快? [关闭]
【发布时间】:2014-03-27 11:49:37
【问题描述】:

哪个更快?

假设 C++ 的编译器是普通的。

///////////////////////
Code A:

int a,b,c;
///////////////////////
Code B:

int a;
int b;
int c;
///////////////////////

也有人说编译器完全忽略了 cmets。喜欢-

"// Comment"
OR
/* Comment*/

假设您的程序有一个一百万行的注释块。我确定编译器首先读取“/ *”并搜索“* /”并将这两者之间的所有文本标识为 cmets。但这是否意味着编译器在遇到“ * /”后正在迭代数百万行代码以找到“ * /”??

TLDR;

我的问题是:-

  • 1) 代码 A 更快还是代码 B 更快???短代码是否意味着更少的编译时间?
  • 2) cmets 是否会影响编译时间?
  • 3) 如何学习优化代码以获得最佳性能?

【问题讨论】:

  • 你在说什么?你没有什么可以优化的
  • 您可以对每一个进行基准测试,但我已经可以告诉您,您可能会对结果感到失望。
  • 您的意思是优化您的代码以获得编译器执行时间?
  • 这里没有什么可以优化的。我在问一些我有的一般性问题。关于 cmets,您编写的代码类型等。
  • 你可以看看这个问题,它展示了如何使用 gcc 自己测量它:stackoverflow.com/questions/6390532/debugging-gcc-compile-times/… 不幸的是我找不到具体的数字,但我想与编译的其余部分。

标签: c++


【解决方案1】:
  1. 不,短代码并不意味着更少的执行时间。例如见here
  2. 不,cmets 不会更改代码的执行时间。 (如果您甚至注意到编译时间增加了,我会感到非常惊讶)
  3. 网上有好几个talks在看这个。最重要的是:衡量一切!

【讨论】:

    【解决方案2】:

    它们将是完全相同的代码和相同的速度。变量声明通常不会是编译器某事的指令,而只是他的声明,以“将 stackpointer-8 字节作为无符号整数处理”。如果您在同一行中声明这些变量,则没有区别。

    答案:

    1. 一般不会。
    2. 不,它们将在编译的第一阶段被淘汰。
    3. 太宽泛了。通常,您应该使用具有高效算法的优化代码。

    【讨论】:

    • 如果 cmets 超过百万行怎么办?就像我说的。编译器需要同时搜索“ / * ”和“ * / ”来将这两者之间的字符识别为 cmets 对吧?这是否意味着编译器正在扫描其间的所有字符以找到“* /”以将其最终确定为注释块?
    • @kotAPI 这是一个简单的概念...... cmets 不是可执行代码的一部分。如果它们不再存在,那么它们将无法影响它。过多的 cmets 可能会使 编译 花费更长的时间(但您不太可能注意到它)。
    • @mah Ahh,这就是我所期待的答案,我知道 cmets 不会增加执行时间,我想知道如果评论块超过一百万行,是否需要很多时间,会不会花很多时间?
    • 你不是在谈论执行时间。编译器将从生成的代码中删除它们。您正在谈论compilation time... 在这种情况下,它们将在第一次通过时被删除,实际删除时间是如此微不足道,以至于您永远不会注意到。对于 Q3 - 首先使用您能想到的最佳设计编写您的应用程序。然后通过使用分析工具测试您的代码进行优化。
    • @Dennis 糟糕,对不起。在这种情况下,我的意思是编译时间。感谢您的回复顺便说一句
    【解决方案3】:

    1) 不,通常不是。 'Sleep(24*60*60*1000)' 需要一天执行。

    2) 不,当然不是。可能发生的“最糟糕”的事情是建造时间稍长,我的意思是“稍微”——计算机真的很快。

    3) 了解更多关于编译过程和一般计算机的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2017-01-30
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多