Я использую 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 () занимает гораздо больше тактов?
Спасибо.