В настоящее время я пытаюсь реализовать различные алгоритмы в компиляторе Just In Time (JIT). Многие из алгоритмов работают с растровыми изображениями, более широко известными как биты.
В С++ существуют различные способы реализации битового набора. Как настоящий разработчик на С++, я бы предпочел использовать что-то из STL. Самый важный аспект - производительность. Мне не обязательно нужен динамически изменяемый битрейт.
Как я вижу, существует три возможных варианта.
я. Один из вариантов - использовать std::vector<bool>
, который был оптимизирован для пространства. Это также указывает на то, что данные не должны быть смежными в памяти. Думаю, это может снизить производительность. С другой стороны, наличие одного бита для каждого значения bool может повысить скорость, поскольку он очень удобен для кеширования.
II. Другой вариант - вместо этого использовать std::vector<char>
. Это гарантирует, что данные смежны в памяти, и легче получить доступ к отдельным элементам. Тем не менее, кажется странным использовать эту опцию, поскольку она не предназначена для битов.
III. Третьим вариантом будет использование фактического std::bitset
. Тот факт, что он не динамически изменен, не имеет значения.
Какой из них следует выбрать для максимальной производительности?