Глядя на STL, который поставляется с gcc 4.0.0, методы набора битов _Find_first
и _Find_next
уже делают то, что вы хотите. В частности, они используют __builtin_ctzl()
(описано здесь ), что должно использовать соответствующую инструкцию. (Я предполагаю, что то же самое относится и к более старым версиям gcc.)
И приятно то, что набор битов уже делает правильные вещи: одиночная инструкция, если набор битов вписывается в одну беззнаковую длину; цикл по длинным, если он использует несколько. В случае цикла это цикл, длина которого известна во время компиляции с несколькими инструкциями, поэтому оптимизатор может полностью развернуть его. То есть Вероятно, было бы трудно победить битсет, выполнив свой собственный.