llvm::PagedVector

A vector that allocates memory in pages.

Synopsis

Declared in <llvm/ADT/PagedVector.h>

template<
    typename T,
    size_t PageSize = 1024 / sizeof(T)>
class PagedVector;

Description

Order is kept, but memory is allocated only when one element of the page is accessed. This introduces a level of indirection, but it is useful when you have a sparsely initialised vector where the full size is allocated upfront.

As a side effect the elements are initialised later than in a normal vector. On the first access to one of the elements of a given page, all the elements of the page are initialised. This also means that the elements of the page are initialised beyond the size of the vector.

Similarly on destruction the elements are destroyed only when the page is not needed anymore, delaying invoking the destructor of the elements.

Notice that this has iterators only on materialized elements. This is deliberately done under the assumption you would dereference the elements while iterating, therefore materialising them and losing the gains in terms of memory usage this container provides. If you have such a use case, you probably want to use a normal std::vector or a llvm::SmallVector.

Types

NameDescription
MaterializedIterator Iterator on all the elements of the vector which have actually being constructed.

Type Aliases

NameDescription
value_type Element type stored in the vector.

Member Functions

NameDescription
PagedVector [constructor]Constructors
~PagedVector [destructor]Destroy materialized pages and, if owned, the internal allocator.
operator= Assignment operators
capacity Return the capacity of the vector. I.e. the maximum size it can be expanded to with the resize method without allocating more pages.
clear Clear the vector, i.e. clear the allocated pages, the whole page lookup index and reset the size.
empty Return true if the vector holds no logical elements.
materialized Return the half-open range of all currently materialized elements.
materialized_begin Iterators over the materialized elements of the vector.
materialized_end Return an iterator past the last logical element (materialized end).
operator[] Look up an element at position Index. If the associated page is not filled, it will be filled with default constructed elements.
resize Resize the vector to NewSize elements.
size Return the size of the vector.