XPerf
语言C++证据

cx-vector-bool — 已测量,仍为提示

状态

提示。实际时间 JSONL: cx-vector-bool.jsonl。未进行语料库分级。2026-10-22 的语料库裁决不涵盖此标识。

测量

clang++ -std=c++17 -O2(Apple clang 版本 21.0.0 (clang-2100.1.1.101))。两个容器都包含 2,000,000 个 true 元素。先遍历打包的 bool 容器。后遍历 vector<unsigned char>。测试程序在 3 次预热后执行 9 轮定时,汇总元素。校验和匹配(18,000,000)。计时结束后保持大于 0。

角色情况中位数毫秒操作次数比率
之后字节迭代器遍历0.09283320000001
之前打包布尔迭代器遍历1.126333200000012.133

对相同容器的索引读取为 4.237×(0.393333 / 0.092834 毫秒,2000000 次操作)。向预留容器中 push_back 400,000 个值为 6.939×(0.721375 / 0.103958 毫秒)。这两者都保持在标准之下。

八百万个元素,在使用这个标准库的分配器进行计数时:packed 容器在一次分配中分配了 1,000,000 字节;byte 容器在一次分配中分配了 8,000,000 字节。packed 容器更小。这个提示是说明情况,并不是让其他 bool 字段进行打包的理由。

限制

扫描器会在拼写 vector<bool>(无论是否加上 std::)的行上标记它。它不知道热点使用是遍历(约 12×)、索引(约 4.2×)还是推入(约 6.9×)。当节省字节比遍历更重要时,保留压缩容器是正确的选择。

默认保持 hint。这个比率不是一般的加速。

解锁

不要仅从此文件将默认值设置为 error。仅用于索引,或者需要更小布局的程序,可能会使字节容器成为错误的修复。在进行任何默认更改之前,仍然需要进行语料库分类。