【发布时间】:2019-12-10 02:24:39
【问题描述】:
std::vector<bool> 是否使用POPCNT 指令来计算std::count 算法的结果?
如果不是,是否可以在不复制粘贴完整向量的情况下实现?为此,我需要访问实际存储在该向量中的 unsigned int 值,这可能吗?
如果重要的话,我只需要 VC++ 2017 解决方案。
【问题讨论】:
-
您可以轻松检查生成的程序集以了解它的作用。你试过吗?
-
@NathanOliver 刚刚检查过。正如我所料,它没有。有没有简单的方法可以做到这一点?
-
@NathanOliver 循环中的按位移位比 POPCNT 慢一个数量级:POPCNT 需要 1 个周期来处理 32 个布尔值。
-
我不确定用矢量执行此操作的方法,因为您没有任何直接访问权限或任何布局保证。也就是说,
boost::dynamic_bitset有一个 count 函数,可以优化使用POPCNT -
如果你知道编译时的位数,你也可以使用
std::bitset,它还有一个可以利用POPCNT的计数函数
标签: c++ visual-c++ vector boolean