为什么llvm::SmallVector拆分其存储
Why does llvm::SmallVector split its storage?
llvm::SmallVector<T,N>
的实现分为许多类型:
-
llvm::SmallVectorBase
包含 3 个void*
的开始、结束和容量。 -
llvm::SmallVectorTemplateCommon<T>
保存小存储的第一个元素,作为适当对齐和大小的char
阵列。 -
llvm::SmallVector<T,N>
保存小存储的下N-1
个元素,作为适当对齐和大小的char
阵列的数组。
为什么存储被拆分在两个类模板之间,而不是让派生最多的类(SmallVector<T,N>
(简单地存储所有N
元素,并将指向此存储的指针传递到基类?也就是说,当前默认构造函数执行以下操作:
SmallVector() : SmallVectorImpl<T>(N) { }
假设不同的实现可以执行以下操作:
SmallVector() : SmallVectorImpl<T>(&Storage, T * sizeof(N)) { }
SmallVectorTemplateCommon
不会有FirstEl
成员。目前实施的优势是什么?
拆分
存储可避免将内联容量(或"小"位(存储在"大小擦除"类型SmallVectorImpl
中。
SmallVectorImpl<T>
可用于引用任何SmallVector<T, N>
并支持其上的所有向量操作。当基础存储增长时,指针无法传递给free
是否正在使用内联容量。将当前存储的地址与内联容量的第一个元素进行比较很方便,并且可以在 SmallVector 中节省一些内存。
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- C++将向量的向量拆分为向量的N个子向量
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 拆分字符数组并存储为向量
- 为什么llvm::SmallVector拆分其存储
- C 将字符串按空白空间将字符串拆分,除非将其封闭在引号中并存储在向量中
- c++如何将文本文件中的一行拆分为两行,然后将每行存储到两个不同的数组中
- C++--文件名中的前导零(CSV文件)--存储/拆分std::矢量的值
- 拆分一个二进制数字符串,并将其存储在c++中的int类型数组中
- 我将如何使用 cin 读取一行用户输入,将该行拆分为空格,并将这些标记存储到字符串数组中