我试图了解 SmallVector 容器在 LLVM 中的使用。我认为 std::vector 可以用来代替小 vector 。如果我们在 llvm::SmallVector 中推送比其大小更多的元素会发生什么?

最佳答案

llvm::SmallVector 是一个针对小数组优化的 vector 。这种优化来自于不对有限数量的元素执行堆分配。

如果您添加的元素比使用自动存储分配的元素多,它将回退到 std::vector 的行为并分配越来越大的数组。

llvm::SmallVector<int, 10> smallVector;
for(int i = 0; i < 10; i++)
{
    smallVector.push_back(i);
}

// No heap allocations have been performed up to this point.

smallVector.push_back(11);

// Only 10 spaces for non heap allocated elements,
// so the push_back above causes a heap allocation.

当您知道您将始终拥有少量元素并且不会遇到堆分配时,SmallVector 可以带来性能优势。这种性能优势是以异常安全和对 llvm 库的依赖为代价的。

关于c++ - std::vector 和 llvm::SmallVector 有什么区别?什么时候用哪一个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42122054/

10-16 05:32