我试图了解 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/