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

speed issue in my project from pointing to an int

本文关键字:速度 问题 int 项目 我的      更新时间:2023-10-16

我正在做一个项目,在这个项目中,大量对象相互交互。我的代码出现了性能问题。假设它具有如下所述的结构。

有一个类(我们称之为"a")是这样的:

class A
{
   /*Some methods and variables*/
public:
   const int* getPointerToTime() { return &mTime; }
private:
   std::vector<B> mBList;
   int mTime;
}

然后是像这个一样的"B"类

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;
}

然后还有另一个类"C",它有一个方法("update"),将在程序的每个循环中调用。像这样:

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;
}

因此,基本上在类"a"中有大量的"B"对象,在类"B"中有许多"C",在每个周期中,这些对象中的每一个都应该更新。一切都很好,但我使用visual studio的性能分析测试了它的性能,有趣的是(也许不是…)

int t = B->getTime();

成为最热门的线路,获得了总样本的38%!我在代码的其他部分使用了这个方法。事实上,在代码中还有其他地方我能想到,它调用这个方法的次数比这里多得多,但它的样本百分比甚至不接近类"C"中使用的百分比!我怀疑当程序达到"C"的更新方法时,类"A"中的变量可能没有缓存在CPU中,但一位朋友建议情况并非如此,因为L3和RAM的计算速度不会在速度上产生太大差异。你觉得呢?

据我所知,我的想法是

函数B->getTime();与任何其他函数相比,被调用的次数更多。

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

对于给定的代码,这个函数被调用的次数很可能比其他任何函数都多。

例如,10个B每个具有100个C。然后B->getTime()在一个循环中被调用1000次。

瓶颈似乎是在执行方法getTime()时,这两个取消引用的影响不应该像方法执行那样大,相比之下,方法执行相当昂贵。