C ++:指针向量与固定大小的数组性能

时间:2014-02-20 01:24:19

标签: c++ arrays vector game-engine

性能方面,哪个更快?

由new运算符分配的对象指针向量?

std::vector<Object *> array;

或者在构造函数中用new分配的数组?

Object[] objects;
objects = new objects[64];

这个想法是,在每一帧中,程序循环遍历每个元素的读/写值。

编辑:

第二个片段是从XNA书中提取的。我没有使用XNA编写我的框架,我正在尝试找出在需要速度的应用程序中使用容器的最佳方法。

1 个答案:

答案 0 :(得分:4)

绝对是第二个。

  • 使用指针向量,可以在堆上的任何位置分配该向量的每个元素。

  • 使用对象数组,所有元素都按顺序存储。这意味着当您遍历数组时,处理器可以更有效地缓存内存块。

这个概念被称为缓存局部性,指的是数据在内存访问模式和缓存方面的组织结构。

正如评论中指出的那样,你的例子都不正确。我认为你的意思是这样的:

std::vector<Object*> vector_of_pointers(size);

Object *array_of_objects = new Object[size];

但是,我担心你可能没有按照你的意图表达你的问题。你不是在比较两个相似的东西。向量基本上只是一个可以在必要时增长的数组。它与数组具有相同的保证,因此如果存储相同的数据类型,则不应注意两者之间的任何差异。

// Bad cache locality:
Object **A = new Object*[size];
std::vector<Object*> B(size);

// Good cache locality:
Object *C = new Object[size];
std::vector<Object> D(size);