You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

boost::dynamic_bitset[]运算符调用序列不同导致计算时长差异问题

boost::dynamic_bitset[]运算符性能差异问题

测试环境

  • 问题复现环境:AWS EC2实例,CPU为Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
  • 无差异对比环境:11th Gen Intel(R) Core(TM) i5-1135G7 笔记本

核心性能现象

测试boost::dynamic_bitset的[]运算符调用时,两种场景下耗时存在显著差异:

  • 定义DO_COUNT_IN_FUNC宏时,整体耗时约370ms
  • 未定义该宏时,整体耗时约1070ms

编译与测试情况

使用编译参数g++ -O2 -std=c++17及其他类似编译组合测试,结果一致。该性能差异仅在上述AWS EC2实例中出现,在11th Gen Intel Core i5-1135G7笔记本上无法复现。

测试代码

#include <boost/dynamic_bitset.hpp>
#include <chrono>
#include <iostream>

// 注释/取消注释该行切换测试场景
#define DO_COUNT_IN_FUNC

int main() {
    boost::dynamic_bitset<> bits(100000000, 1);
    auto start = std::chrono::high_resolution_clock::now();

#ifdef DO_COUNT_IN_FUNC
    size_t count = 0;
    for (size_t i = 0; i < bits.size(); ++i) {
        if (bits[i]) {
            ++count;
        }
    }
#else
    for (size_t i = 0; i < bits.size(); ++i) {
        if (bits[i]) {
            // 空分支,仅触发[]运算符调用
        }
    }
#endif

    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "耗时: " << duration.count() << "ms" << std::endl;
#ifdef DO_COUNT_IN_FUNC
    std::cout << "计数结果: " << count << std::endl;
#endif
    return 0;
}

运行结果截图说明

截图显示:定义DO_COUNT_IN_FUNC宏时程序输出耗时约370ms;未定义该宏时输出耗时约1070ms

内容的提问来源于stack exchange,提问作者Venkata Subbarao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:20:11