max*_*dev 0 c++ heap performance compilation
是否更快使用++(a = b);而不是a = b + 1;?
据我了解,第一种方法包括以下操作:
b来aa内存增量而第二种方法是:
b和1到堆栈a它实际上需要更少的周期吗?或者编译器(例如gcc)是否进行了优化,因此它没有什么区别?
编辑: TIL ++(a=b)是错误的非法 UB,至少在C++之前11.不过,我会讨论这个,假设它是合法的,或者编译器做了你期望的事情.
一般来说,a = b + 1;速度更快.
优化器肯定会对两者都做同样的事情.如果没有,它更有可能优化第二个版本,因为它是一个非常常见的写入,并且omtimizers比奇怪的角落案例更容易识别常见事物.
为什么我说它在优化后应该是相同的,但第二个更快?因为开发人员.每个人都立刻认出来a = b + 1;.没有人真的要考虑它.另一种情况更可能引发"他是在做什么,为什么?" 这样的反应.很多人最终会弄清楚你在那里做了什么.有些人不会.有些人甚至会因此而引入错误.很少有人会发现你为什么这样做,但每次他们必须阅读这条线时都会发现.阅读该行时,每个人都会浪费时间.这就是为什么另一个更快的原因.
警告:所有这些都是静默写的,假设你在谈论内置类型,比如ints或指针.你对这两个人的支持的解释是什么.如果我们谈论UDT,那么这两条线甚至都不能保证做同样的事情.然后,它完全取决于如何operator=,operator++以及operator+也许从int转换来实现.然而,如果实现让你考虑写++(a=b),他们很可能是糟糕的实现,应该改进而不是被黑客攻击.
tl;博士:如果我抓住你++(a=b)在我工作的任何代码库中做,我们必须有一个认真的谈话;-)