C++ предоставляет bitset
для хранения бит. В соответствии с эталоном класс эмулирует массив из bool
элементов, но оптимизирован для распределения пространства. В каких случаях следует отдать предпочтение другому?Битрейт быстрее, чем массив bools?
ответ
Вам необходимо сравнить ваш прецедент.
- обычная реализация
bitset<N>
используют бит на элемент иarray<bool, N>
- байты за элемент, так что первые имеют более высокие изменения, чтобы поместиться в L1d..LLd, и таким образом, может быть быстрее для критического размера битовой маски , по крайней мере, при выполнении последовательного доступа bitset<N>
делает больше математики так под некоторые модели доступа (высоко случайные) вполне могут быть медленнее- при доступе одновременно,
array<bool, N>
будет иметь меньше конкуренции для каждого элемента, так что производительность будет зависеть много на шаблон доступа.
Правильная вещь - принимать измерения.
Тем не менее, как я помню, документы о битах всегда говорили, что бит-набор не гарантированно является реальным битом, это всего лишь рекомендация для компилятора и удобный синтаксис для манипуляций с битами.
В компиляторах встроенных систем многие используют реальные биты, потому что работа с битами является реальной необходимостью в таких программах.
Что касается скорости, противоположность более разумная - работа с массивами проще с помощью индексации. Работа с битами требует больше математики, доступа к правильному слову и последующего доступа к правильному биту.
В то время как «бит-сдвиги означают дополнительную работу, поэтому она должна быть медленнее!» звучит разумно, на практике дополнительные затраты составляют две дополнительные смены, а также две и более (не более). Это около двух циклов на современных процессорах. Но вы просто увеличили давление памяти в восемь раз, что может иметь гораздо большие последствия для производительности. Так что это далеко не так ясно. – Voo
- 1. Как memset массив bools?
- 2. Как std :: vector быстрее, чем простой массив?
- 3. Возвращаемый массив быстрее, чем возврат элемента массива
- 4. Преобразование двумерный массив поплавки для BOOLS
- 5. Как использовать int как массив ints/bools?
- 6. Эффективно изменить массив bools на строку - Swift
- 7. Как объявить массив bools в C++?
- 8. Создание и цикл через массив bools
- 9. Java быстрее, чем C?
- 10. Is parseInt() быстрее, чем toString()?
- 11. Из потока быстрее, чем cout? || Хранение быстрее, чем визуальный вывод
- 12. Массивы: быстрее читать, чем создавать?
- 13. Быстрее, чем конструктор?
- 14. Push_back быстрее, чем вставить?
- 15. Почему == быстрее, чем eql?
- 16. Is> быстрее, чем ==?
- 17. Улей быстрее, чем Искра?
- 18. XPath:/быстрее, чем //?
- 19. Быстрее, чем Thread.Sleep (1)?
- 20. быстрее, чем Stackwalk
- 21. Суммируется быстрее, чем умножается?
- 22. Что быстрее, чем завиток?
- 23. Содержит быстрее, чем StartsWith?
- 24. Быстрее, чем xlib
- 25. _mm_sad_epu8 быстрее, чем _mm_sad_pu8
- 26. LinkedList быстрее, чем List?
- 27. Java быстрее, чем C
- 28. 950M быстрее, чем 970M?
- 29. ничего быстрее, чем .include?
- 30. быстрее, чем in_array?
Быстрее для чего? – juanchopanza
Почему бы не написать код для получения статистики производительности? –
Хороший вопрос. Вы должны сравнить свою проблему с использованием обеих реализаций. – StoryTeller