当位集很大时,为什么C ++ std :: bitset :: reference :: operator bool()变慢?

时间:2018-09-22 17:44:41

标签: optimization reference bitset

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

谢谢。

0 个答案:

没有答案