XPerf
语言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 的成本。未改变的本地字符串已经被提升。