在对游戏进行编程时,我曾经将所有游戏对象存储在具有初始化和固定大小的std :: vector中。最近,我感到需要在游戏对象类之间进行一些继承。
因此,假设我有40个类来自我的敌人类。如果我要将这些类的对象/实例存储在矢量中,则只能选择将它们存储为矢量Enemy *,对吗?因此,唯一连续分配的是指针,对吗?因此,当需要取消引用这些缓存时,我仍然会有很多缓存丢失,对吗?
是否有任何“最佳实践”方式,将派生类存储在连续分配的内存中,从而使它们之间的循环花费最少的时间?
每次我遍历类中的数组(通过指针访问)时,我都会问自己同样的问题:
每次迭代是否通过取消引用指针产生开销?取消引用链加起来吗?例如:
ClassA *a = new ClassA();
ClassB *b = new ClassB();
for( int i = 0; i < 10; i++){
a->b->array[i].foo();
}
Run Code Online (Sandbox Code Playgroud)
如果我不得不猜测,我会说这涉及 20 个取消引用步骤,每个指针一个,10 次迭代。但我也可以想象,它减少到 10 个,因为链接的指针被编译器翻译成一个。我什至可以想象,由于某些缓存伏都教或其他原因,它会减少到 1。
有人可以告诉我,也许可以向我解释,这在性能方面的表现如何?真的很感激!
顺便说一句,我知道这里已经回答了类似的问题,但我无法推断出这个特定主题的答案。所以请不要怪我再次提出这个话题。