始终分配vs检查相等和分配

时间:2015-06-10 12:45:04

标签: c++ performance

之间是否存在明显的性能差异:

if (a != b) a = b;a = b;

ab都是intbool相同的内置类型,或者可能是一个非常简单的小struct?< / p>

据我所知,第二个表达式每次都会写入内存(我假设这是一个比读取更重的操作),而第一个表达式只有在ab不相等时才会执行。

或者可能取决于b值的变化频率?

我明白它更像是&#34; ++ i vs i ++&#34;有点问题,我很好奇,但是

1 个答案:

答案 0 :(得分:1)

这取决于。

对于x86 CPU,程序涉及的操作成本大致如下:

  • 非缓存读取(即从尚未缓存的RAM读取):~100个时钟
  • 缓存读取:3到~10个时钟
  • 寄存器读取:1/2时钟(值非常粗糙,因为没有这样的单一操作&#34;读取&#34;)
  • 写:变化并且取决于,但通常是〜1个时钟
  • 比较:如果编译器猜测最多5-10个时钟&#34;哪个分支将发生&#34;是错的(这被称为&#34;管道失速&#34;);否则 - 1个时钟。

使用此信息,您可能会做出一些猜测; - )。

对于其他(非x86)桌面/服务器/移动CPU,数量会有所不同,但总体情况大致相同。