基本C ++速度(初始化与添加)和比较速度

时间:2010-03-26 17:47:07

标签: c++ c comparison initialization performance

我很好奇,如果有人知道以下哪一项执行得更快(我知道这似乎是一个奇怪的问题,但我想尽可能多地节省时间和资源。)

int i=0;

i+=1; 

int i;

i=1;

我也很好奇哪种比较更快:

//given some integer i
// X is some constant
i < X+1

i<=X

对于那些已经发布答案的人,我很抱歉,我编辑了所以第一部分是正确的,我的意思是如果我被初始化为0.再次抱歉混淆。

6 个答案:

答案 0 :(得分:16)

第一个操作可能没有意义,因为除非i是静态的,否则你已经i未初始化。

你被误导并专注于错误的事情。猜猜不会让你到任何地方;提供个人资料,分析您的代码,并找出数据哪些部分需要优化。优化是设计更改,无论是不同的数据结构还是算法。

严重低估了编译器。你所做的一切都不会对这些微小的变化产生影响,两者都会编译到编译器决定的速度更快。如果你想要一个整数,只需做:int i = 1;并过你的生活。如果你想比较一个整数是否小于或等于X,那么就这样说:i <= X;。写清洁可读代码。另外,当X处于最大值时,你的两个比较是不一样的;你添加一个就会溢出。

如果你真的很认真,那么:再拔出一个探查器。另一件事是查看生成的程序集并查看它生成的指令。如果您不知道如何做到这一点,那么您可能无法需要优化。 :/

答案 1 :(得分:0)

如果我是你,我会更担心哪一个能给你你想要的结果,因为两者完全不同。事实上,正如你所写的那样,只有一个有可定义的结果。

答案 2 :(得分:0)

在第一个示例中,可能最好使用int i=1;,尽管速度低于正确性(例如,如果i具有自动存储功能, int i; i+=1;会给出未定义的行为。)

第二,如果有任何差异,它可能有利于i <= X;(但这里也不会有任何差异)。

答案 3 :(得分:0)

第一个可能更快,因为它调用未定义的行为,优化器基本上可以将其视为不存在。但是,我怀疑那不是你想要的。

答案 4 :(得分:0)

我假设你所谈论的变量是本地的(不是全局的)。

如果是这样的话,你写的第一件事: int i; ... 我++; //这发生在一个函数中 是错的。我不相信。如初。

如果我是全球性的,那么我可能会相信它,但除非我知道编译器和运行时环境如何工作,否则我仍然不会相信它。即使这样,优化器也应该将其初始化为0并使其自由。

如果您只是使用简单的整数类型,那么编译器应该处理这种类型的操作。你应该能够在这里检测到的唯一区别是,你的一些变量存储的寄存器可能会被交换,这几乎不重要。这只是在编译器的寄存器分配器中以不同的顺序抛出数据的副作用,我甚至不知道为什么我提出它。哦,是的,我记得为什么我提起它 - 因为如果你碰巧看到了程序集并看到代码生成的差异,你可能不相信我。

通过比较,如果X是变量,那么绝对没有编译器优化,你可能会更好地使用第二个。

我是关于微优化的OCD,我可以向你保证,对于一个愚蠢的编译器来说,这不会为你赢得任何东西。

答案 5 :(得分:0)

有些人是表现方面的专家。我不认为他们中的任何一个会建议你从这么低的水平开始。相反,他们会说,编写你的程序,干净地,然后分析。我让人们求我我猜猜他们的程序可能会变慢,我可以和任何人一样猜测,也就是说,严重Here's the method I use to find out what needs to be optimized.