解决方案1:
如果我有一个像

class car{ public: int a; string b; bool c;};

我可以建立200辆汽车的 vector :
std::vector<car>   allcas;
allcars.resize(200)

在运行时,我只是这样做:
this_car=allcars[102];

然后 ....

解决方案2:

我有
std::vector<int> a; a.resize(200);
std::vector<string>b; b.resize(200);
std::vector<bool> c; c.resize(200);

this_car_a = a[102];
this_car_b = b[102];
this_car_c = c[102];

题:
哪一个更快?

有人有主意吗?在此先多谢!

最佳答案

与“结构 vector ”相比,“结构 vector ”具有几个优点:

  • 如果您的内部循环没有使用该结构的每个元素,那么 vector 结构可以节省内存带宽,因为未使用的元素 vector 不会加载到缓存中。
  • 矢量化更容易。 vector 结构可以使您使用处理器的 vector 处理指令(通过汇编,内在函数或巧妙的编译器)来加速内部循环。

  • 另一方面,过早的优化是万恶之源:
  • 使用 vector 结构更加困难,尴尬和晦涩。
  • 通常,在没有启动并运行代码之前,您通常不知道性能瓶颈在哪里。是否值得使您的代码更加冗长,脆弱和困难?直到您真正配置它,您才知道。
  • vector 结构编程的好处因情况而异。它并不总是会加速。最终可能会导致性能下降。
  • 特别是,如果您的访问模式是随机的(相对于顺序访问或本地化访问而言),那么 vector 结构组织最终可能会从内存中加载更多无用的数据,如果每个缓存行都包含来自多个附近对象的元素...

  • 因此,我的建议是默认使用 vector 结构,但请牢记 vector 结构作为替代(即,如果您期望顺序访问/本地访问模式,请确保稍后可以切换,但不要这样做)花费很多精力)。程序运行后,您可以对其进行概要分析,以查看对性能至关重要的部分的位置,并尝试使用 vector 结构和向量化操作来发挥最大作用。

    07-24 09:44
    查看更多