Skip to content

IvanPleshkov/compact_vector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

compact_vector

WORK IN PROGRESS

Компакнтый вектор. Контейнер, реализующий интерфейс std::vector с применением технологии small string optimization.

Подробнее. Обычно вектор стандартной библиотеки имеет три поля: указатель/индекс для задания begin, end и capacity (где указатель, а где индекс зависит от реализации стандартной библиотеки). Следует отметить, что два указателя на x64 - это 16 байт, в которые вполне можно уместить небольшой вектор. Данный контейнер позволяет использовать стек для хранения небольшого количества данных, и кучу в противном случае. Размещение данных на стеке или куче производится автоматически.

Использование аналогично использованию std::vector со следующими отличиями:

  • compact_vector имеет дополнительный параметр в шаблоне - compact_max_size. Это значение задает количество элементов, которые умещаются в стеке. compact_max_size не может быть меньше единицы, в противном случае вычисляется автоматически из sizeof(void*) и sizeof(size_t);
  • максимальный размер контейнера ограничен значением std::vector::max_size() / 2;
  • возможное проседание перфоманса вследствие дополнительных проверок на источник данных (стек или куча), перемещения данных из стека в кучу и обратно и, в целом, из-за пропущенных автором техник оптимизации;

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published