Я работаю в игрушечной файловой системе, я использую bitset
для отслеживания используемых и неиспользуемых страниц.Я использую array
из int
с (чтобы использовать встроенные битовые операции GCC) для представления bitset
.Я не использую std::bitset
, так как он не будет доступен в конечной среде (встроенная система).
Теперь, согласно Linux perf
, во время тестов на выделение файлов уходит 35% времени выполнения, 45% времени теряется при установке битов, используя
#define BIT_SET(a,b) ((a) |= (1ULL<<(b)))
внутри цикла.Согласно отчету 42% времени теряется в or
.Удаление происходит немного быстрее, но тогда большая часть времени теряется в операции and
, чтобы очистить биты. Переключение битов с помощью xor не имеет значения.
В принципе, мне интересно, есть ли более разумные способы установки нескольких битовна одном дыхании.Если пользователь запрашивает 10 страниц пространства, просто установите все биты за один раз, но проблема в том, что пространство может охватывать word
границы.или какие-либо особенности GCC / Clang, о которых мне следует знать?