繁体   English   中英

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

[英]Basic C++ Speed (initialization vs adding) and comparison speed

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

int i=0;

i+=1; 

要么

int i;

i=1;

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

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

要么

i<=X

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

第一次运行可能有,因为,除非没有任何意义i是静态的,你离开i初始化。

你被误导并专注于错误的事情。 猜猜不会让你到任何地方; 显示配置文件,分析您的代码,并找出数据需要优化的部分。 优化是设计变更 ,无论是不同的数据结构还是算法。

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

如果你真的很认真,那么:再拔出一个探查器。 另一件事是查看生成的程序集并查看它生成的指令。 如果你不知道该怎么做,那么你很可能不是在一个位置, 需要优化。 :/

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

在第一个例子中,使用int i=1; 可能会更好int i=1; 虽然它不是关于速度而是关于正确性(例如,如果i有自动存储,则int i; i+=1;将给出未定义的行为)。

在第二个,如果有任何差异,它可能有利于i <= X; (但这里很可能没有任何区别)。

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

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

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

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

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

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

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

有些人是表现方面的专家。 我不认为他们中的任何一个会建议你从这么低的水平开始。 相反,他们会说, 干净地编写您的程序,然后进行配置。 我有过的人我猜什么可以使他们的程序慢,我可以猜测,以及任何人,这是说, 不好 这是我用来找出需要优化的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM