Какую реализацию набора битов следует использовать для максимальной производительности?

В настоящее время я пытаюсь реализовать различные алгоритмы в JIT-компиляторе Just In Time (). Многие алгоритмы работают с растровыми изображениями, более известными как наборы битов.

В C++ существуют различные способы реализации набора битов. Как настоящий разработчик C++, я бы предпочел использовать что-то из STL. Самый важный аспект — производительность. Мне не обязательно нужен динамически изменяемый битовый набор.

Как я понимаю, возможны три варианта.

I. Одним из вариантов может быть использование std::vector<bool>, оптимизированного для использования в пространстве. Это также указывает на то, что данные не должны быть непрерывными в памяти. Думаю, это может снизить производительность. С другой стороны, наличие одного бита для каждого логического значения может повысить скорость, поскольку это очень удобно для кэширования.

II. Другой вариант - вместо этого использовать std::vector<char>. Это гарантирует непрерывность данных в памяти и упрощает доступ к отдельным элементам. Однако использование этой опции кажется странным, так как она не предназначена для битового набора.

III. Третьим вариантом было бы использование фактического std::bitset. Тот факт, что он не имеет динамического изменения размера, не имеет значения.

Какой из них выбрать для максимальной производительности?

13
задан Man of One Way 15 January 2016 в 18:35
поделиться