语言C证据
cp-strlen-in-cond — 已测量,仍然提示
状态: 已测量。默认保持 提示。未经过语料库筛选。
主张
当编译器必须假设字符串可能会改变(循环中读取一个 volatile 标志,一个 1500 字节字符串扫描 40 次)时,循环条件中的 strlen 大约是提升后的长度的 125×。在未改变的字符串上相同的写法大约是 0.93×:-O2 已经提升了 strlen。匹配器无法区分这两种情况。
如何测量
clang -std=c11 -O2- 双方对相同的字节求和。volatile 标志保持为 0,所以字符串没有改变。
- 原始文件:
cp-strlen-in-cond.jsonl
限制
不要将 125× 理解为每个条件中 strlen 的成本。未改变的本地字符串已经被提升。