[LLVM数据结构]SmallVector

2019-09-29  本文已影响0人  HAPPYers

LLVM SmallVector

简介

SmallVector 是一个动态可变长数组,为数组比较小的情况进行了优化。它在类中(实际是在末尾)包含 N 个元素(in-place,在位元素),当元素数量少于这个 N 的时候,数据保存在类中,从而避免了堆的内存分配。这样在数组较小的时候很快很节省,变大了也能够支持。

代码定义

头文件位于llvm/ADT/SmallVector.h

文件中定义有:

概述

模板类 SmallVector<T>SmallVectorImpl 派生:

template <typename T, unsigned N>  // 注1
class SmallVector : public SmallVectorImpl<T> {
   U InlineElts[NUM];  // 注2 
   this()  // 多个构造,用计算出来的可容纳 T 元素的数量 NumTsAvailable 调用基类构造。
}

实现机理

SmallVector 使用在类里面的空间(in-place空间)保存 N个 T 元素。当 push 更多元素的时候,grow() 函数将从堆中申请空间容纳更多元素。这种实现优化了当大部分情况元素数量都少于等于 N 的时候,不用从堆中分配内存,从而得到空间上的优化。

特化版本

设计目的

上一篇下一篇

猜你喜欢

热点阅读