c++ - 随着实体数量的增加,物理代码变得越来越慢

标签 c++ multithreading oop caching

我在一次在线面试评估中遇到了这个问题。

您注意到随着实体数量的增加,您的物理代码变得越来越慢。以下哪项可以提供帮助?

typedef struct Entity_t{

double pos_x, pos_y;
double vel_x, vel_y;
int health, action, mind;
int level;
void *equipment, *abilities, *effects, 

}Entity;
  • A.将物理数据移动到数组结构以增加缓存一致性。
  • B.通过将设备、能力和级别移动到实体中来减少指针间接。
  • C.重新排列数据,使 pos_x 、 pos_y 、 vel_x 和 bel_y 最后以提高访问速度。
  • D.将实体移动到链接列表中,以便您可以直接从当前访问下一个项目。

我的猜测是 D,但我觉得这不对,因为我认为在这种情况下更快地访问下一个项目没有帮助。物理代码变慢的原因应该与缓存有关。 A与缓存有关,但我不知道“将物理数据移动到结构”是否可以增加缓存一致性。我只知道缓存一致性的硬件解决方案。 B & C 似乎都与问题无关。

最佳答案

预期答案是 B。增加动态分配的指针数量会增加缓存未命中,但更重要的是,连续的动态 [解除] 分配会显着降低程序速度。 但这个答案是主观的;如果没有完整的最小代码示例,则无法提供准确的解决方案,也可能会考虑其他选项。

关于c++ - 随着实体数量的增加,物理代码变得越来越慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53441460/

相关文章:

c# - 确保List <T>类型中的所有元素均为T

c++ - opencv 仍然使用 cuda 内存

c++ - WritePrivateProfileString - 不可预测

java - 为什么有两个运行线程而不是一个?

python - 尽管我还没有创建该类的实例,但为什么要从类中打印(x)?

python - 面向对象的函数参数来改变变量

java - 用于列出源文件中所有函数的 linux 工具?

c++ - 捕获 R6025 纯虚拟调用

python - 清除 Tkinter 条目文本 - 所以新文本看起来很新?

c# - 进度条在 winform 中卡住