在并行追加时,使用向量列表和向量的向量对性能的影响

Performance implications of using a list of vectors versus a vector of vectors when appending in parallel

本文关键字:向量 列表 影响 性能 追加 并行      更新时间:2023-10-16

似乎在一般情况下,当附加简单类型时,向量比列表更受欢迎,参见这里的示例。

如果我想用简单类型填充一个矩阵呢?每个向量都是一列,所以我要遍历外部向量,并在每个向量上重复添加1项。

当前面的向量增加其保留空间时,外部向量的后面的向量是否总是必须移动?所有的数据都在一个连续空间里吗?还是所有的向量都只持有一个指向它们各自内存区域的指针,所以即使单个向量增长,外部向量的内存大小也保持不变?

从评论来看,向量的向量似乎可以很好地使用。

对于中小型应用,很少需要担心矢量的效率。

有几种情况你可能会担心,但它们并不常见。

class CData {};  // define this
typedef std::vector<CData> Column;
typedef std::vector<Column> Table;
Table tab;

要添加新行,将在每列上附加一个项。在最坏的情况下,您可能会导致每个列的重新分配。这可能是一个问题,如果 CData是非常复杂的,列目前持有非常大量的CData单元格(我想说,成千上万,至少)

同样,如果您添加一个新列并强制表向量重新分配,它可能必须复制每个列,并且对于非常大的数据集,这可能会有点慢。

但是,请注意,新编译器可能能够将旧表中的列move到新表中(而不是将它们copy),从而使其非常快。

正如@kkuryllo在评论中所说,这通常没什么好担心的。

努力使你的代码尽可能干净、简单和正确。只有当性能分析揭示了性能问题时,您才应该担心优化速度。