预分配列表

Pre-Allocated List

我有两个对象列表

list<QC> qcB;
list<QC> qcS;

并且正在使用 emplace_back() 将项目插入其中。因为我意识到插入项目花费的时间太长,所以我开始搜索我从未使用过的分配器,看看我是否能够使事情变得更快 运行。我在某处读到我可以获得列表的默认分配器,并提前在其上分配 space,所以我尝试在其中一个列表中分配 space:

qcB.get_allocator().allocate(100000);

我不确定这是否应该起作用,但事实是 emplace_back() 对两个列表花费相同的时间,即使其中一个正在分配 space 事先.

这应该有效吗?这应该以不同的方式完成,而不是尝试在默认分配器中分配 space 吗?我不时清理列表,这可能会影响分配的 space?

感谢您的帮助。

如果你说的是标准库list,它通常是链表算法或类似算法。

假设你已经做了很好的分析并且插入确实是问题所在,并且假设你只想做 emplace_back 调用。然后使用 vector,它允许您调用 reserve 并且应该有更多的性能。

vector<QC> qcB;
qcB.reserve(10000);

但我担心你的实际瓶颈是对象 QC 初始化,而这不能 reserved。在这种情况下,您可以预初始化对象(如果初始化对象然后将实际数据放入其中是有意义的)。

像这样(快速和肮脏的草稿):

vector<QC> qcB;
qcB.resize(10000);

for (int i = 0; i < 10000; ++i) {
    qcB[i].populate_object();
}