我正在使用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()运算符需要更多的时钟周期吗?
谢谢。