我的项目中的速度问题指向一个int

时间:2014-11-05 14:11:47

标签: c++ performance

我正在开展一个项目,在这个项目中,大量对象相互交互。我的代码存在性能问题。可以说它具有如下所述的结构。

有一个类(让我们称之为" A"),如下所示:

class A
{
   /*Some methods and variables*/

public:
   const int* getPointerToTime() { return &mTime; }

private:
   std::vector<B> mBList;
   int mTime;
}

然后有课程&#34; B&#34;像这样

class B
{
   /*Some methods and variables*/

public:
   B(A* myA) { mTime = myA->getPointerToTime(); }
   int getTime() { return *mTime; }

private:
   std::vector<C> mCList;
   const int* mTime;
}

然后还有另一个班级&#34; C&#34;它有一个方法(&#34;更新&#34;),将在程序的每个循环中调用。像这样:

class C
{
   /*Some methods and variables*/

public:
   C(B* myB) { mMyB = myB; }
   void update()
   {
     int t = mMyB->getTime();
     /*some things to do here with "t"*/
   }

private:
   B* mMyB;
}

所以基本上有很多&#34; B&#34;课堂上的对象&#34; A&#34;并且有很多&#34; C&#34;在课堂上&#34; B&#34;并且在每个周期中,应更新这些对象中的每一个。一切正常,但我使用visual studio的性能分析测试了它的性能,有趣的是(或者可能不是......)线

int t = B->getTime();

成为最热门的产品,占总样品的38%!我在代码的其他部分使用此方法。实际上我可以想到代码中的其他地方,这比这里更多地调用这个方法,但它的样本百分比甚至不接近于类中所使用的那个&#34; C&#34;!我怀疑可能是班级中的变量&#34; A&#34;当程序到达&#34; C&#34;的更新方法时,它没有被缓存在CPU中,但是一位朋友认为情况并非如此,因为L3和RAM的计算速度无法实现速度差异很大。你觉得怎么样?

2 个答案:

答案 0 :(得分:1)

据我所知,Visual Studio

函数B-&gt; getTime();与任何其他函数相比,被称为更多次。

因为这个函数是由B类成员的C对象调用的。

使用给定的代码,很有可能比任何其他函数调用此函数的次数更多。

例如,10个B每个都有100个C。然后在一个循环中调用B-&gt; getTime()1000次。

答案 1 :(得分:0)

瓶颈似乎是在执行方法getTime()时,两个去引用不应该像对比的方法执行一样多。