启用整数溢出检查会引入性能开销,但程度差异很大。初步估计(基于工作负载分析,SPECint 基准测试)表明,每次加/减运算可能产生 2 倍的性能惩罚,从而导致典型的“工作站”整数工作负载整体性能下降约 3-5%。 然而,使用 bzip2 进行实际测试显示情况更为复杂。启用诊断错误消息时,压缩速度降低了 28%,解压缩速度降低了 9%。禁用诊断(使用 `-fsanitize-undefined-trap-on-error`),性能损失微乎其微。这种差异源于生成详细的错误消息会破坏编译器优化。 具体来说,clang 的消毒器会生成低效的代码——例如不必要的寄存器保存/恢复——导致显著的减速(在简单的加法循环中为 4-6 倍)。较新版本的 clang(3.8+)和 gcc(5+)改进了寄存器分配,减轻了这个问题,尤其是在使用 `-fno-sanitize-recover` 标志时。 最终,虽然溢出检查*应该*会产生轻微的性能成本,但实际影响很大程度上取决于编译器、优化级别以及是否启用了详细的错误报告。