我要缓存它吗?

时间:2011-01-20 16:08:20

标签: c++ optimization

上课时:

class X
  {
  int data_;
  void f()
    {
    //shall I cache var data_? by doing
    int cached = data_
    //and instaed of this:
    if (data_ >= 0 && data_ < 1000 || data_ < 0 && data_ > -1000)//first version
      {
      //do something
      }
    else
      {
      //do somegthing else
      }
    // have this:
    if (cashed >= 0 && cashed < 1000 || cashed < 0 && cashed > -1000)//second version
    // in my opinion this is bad code
      {
      //do something
      }
    else
      {
      //do somegthing else
      }
    }
  };

请参阅代码中的注释 我问这个问题是因为我大学的同谋说这种代码(第1行)只是一个糟糕的代码。我认为他说的是垃圾,但我对你对这个问题的看法非常感兴趣 谢谢。

3 个答案:

答案 0 :(得分:1)

*缓存

除非你的data_变量在执行过程中发生变化,否则这两个代码段之间没有任何区别。

答案 1 :(得分:1)

除非已经太慢,否则不要进行优化:编写最清晰,最简单的代码,测量它,如果速度太慢,请使用工具发现(而不是猜测)哪个部分最慢。如果可能,在部署缓存之前使用更好的算法&amp;其他次要的优化。在任何情况下,一旦你优化了那个部分,再次测量它,如果它仍然太慢,重复。

话虽如此,@ Zhais是正确的。两个代码片段没有功能差异。

答案 2 :(得分:1)

这种优化称为过早优化。在被证明是瓶颈之前,你不应该做那样的优化。

在第一种情况下,变量实际上用作this->data_,但您无法确定,因为编译器可能会自行缓存它。