почему C ++ std :: bitset :: reference :: operator bool () работает медленно, когда bitset велик? - PullRequest
0 голосов
/ 22 сентября 2018

Я использую std::bitset в качестве маски.Если конкретный offset равен 1, я сохраню переменную / вызову функцию.как:

const int ArraySize = 20; int offset = 18; //this variable is set at runtime. std::bitset<ArraySize> mask; ... if(mask[offset]) Variable.simple_operation();

Из-за некоторого сценария приложения мне нужно ArraySize около 2000000.После профилирования в Xcode я обнаружил, что 80%~90% времени используется для:

std::__1::__bit_reference<std::__1::bitset<262144ul,16777216ul>,true>::operator bool() const

std::__1::bitset<16777216ul>::operator[] едва занимает 2% времени работы.

Я изучил <__bit_reference>, где определено operator bool().Код:

_LIBCPP_INLINE_VISIBILITY operator bool() const _NOEXCEPT {return static_cast<bool>(*__seg_ & __mask_);}

В основном это bit and, а затем разыменование.Поскольку моя simple_operation очень проста, как m++.В профиле моя simple_operation даже не отображается.Это потому, что оператор bool () занимает гораздо больше тактов?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...