Я пытался выяснить, могу ли я оптимизировать случай, когда у меня много маленьких векторов данных. В моем случае использования может быть 100 000+ из этих векторов, поэтому размер векторного хранилища является критическим. У каждого может быть только один или два элемента порой, но во многих случаях они могут увеличиваться.
Я пробовал использовать простой std::vector, но это невероятно медленно, поскольку он выделяет N небольших буферов в куче, которая отнимает память и занимает слишком много времени в критичной по времени среде. Эффективно оптимизация малого буфера (SBO) на векторе, похоже, выглядит как жизнеспособное решение. Это означает, что внутренние (т.е. Данные стека) вектора используются до тех пор, пока они не будут превышены, и только тогда необходимо использовать кучу.
Я наткнулся на LLVM SmallVector, который, похоже, делает именно это. Однако он, похоже, имеет множество зависимостей в рамках LLVM и задавался вопросом, есть ли что-то подобное в Boost? Возможно, оптимизация SBO выполняется с помощью реализации Boost, но я не могу найти ссылки на нее в моих поисках. Я видел, что реализация STL технически запрещена для этой оптимизации, хотя из-за некоторого правила об итераторах?
Ссылка: LLVM SmallVector находится во внутреннем исходном коде программного обеспечения LLVM.