在以下情况下哪个更快? [关闭]
Posted
技术标签:
【中文标题】在以下情况下哪个更快? [关闭]【英文标题】: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 自己测量它:***.com/questions/6390532/debugging-gcc-compile-times/… 不幸的是我找不到具体的数字,但我想与编译的其余部分。 【参考方案1】:-
不,短代码并不意味着更少的执行时间。例如见here
不,cmets 不会更改代码的执行时间。 (如果您甚至注意到编译时间增加了,我会感到非常惊讶)
网上有好几个talks在看这个。最重要的是:衡量一切!
【讨论】:
【参考方案2】:它们将是完全相同的代码和相同的速度。变量声明通常不会是编译器做某事的指令,而只是他的声明,以“将 stackpointer-8 字节作为无符号整数处理”。如果您在同一行中声明这些变量,则没有区别。
答案:
-
一般不会。
不,它们将在编译的第一阶段被淘汰。
太宽泛了。通常,您应该使用具有高效算法的优化代码。
【讨论】:
如果 cmets 超过百万行怎么办?就像我说的。编译器需要同时搜索“ / * ”和“ * / ”来将这两者之间的字符识别为 cmets 对吧?这是否意味着编译器正在扫描其间的所有字符以找到“* /”以将其最终确定为注释块? @kotAPI 这是一个简单的概念...... cmets 不是可执行代码的一部分。如果它们不再存在,那么它们将无法影响它。过多的 cmets 可能会使 编译 花费更长的时间(但您不太可能注意到它)。 @mah Ahh,这就是我所期待的答案,我知道 cmets 不会增加执行时间,我想知道如果评论块超过一百万行,是否需要很多时间,会不会花很多时间? 你不是在谈论执行时间。编译器将从生成的代码中删除它们。您正在谈论compilation time
... 在这种情况下,它们将在第一次通过时被删除,实际删除时间是如此微不足道,以至于您永远不会注意到。对于 Q3 - 首先使用您能想到的最佳设计编写您的应用程序。然后通过使用分析工具测试您的代码进行优化。
@Dennis 糟糕,对不起。在这种情况下,我的意思是编译时间。感谢您的回复顺便说一句【参考方案3】:
1) 不,通常不是。 'Sleep(24*60*60*1000)' 需要一天执行。
2) 不,当然不是。可能发生的“最糟糕”的事情是建造时间稍长,我的意思是“稍微”——计算机真的很快。
3) 了解更多关于编译过程和一般计算机的信息。
【讨论】:
以上是关于在以下情况下哪个更快? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 从 Session 读取值或从 URL 参数读取值哪个更快? [关闭]