我创建了一个非常简单的基准来说明短字符串优化并在quick-bench.com上运行它。该基准测试非常适用于 SSO 禁用/启用的字符串类的比较,结果与 GCC 和 Clang 非常一致。-O2
但是,我意识到当我禁用优化时,报告的时间比启用优化 (或)观察到的时间快 4 倍左右-O3
,无论是使用 GCC 还是 Clang。
基准测试在这里:http: //quick-bench.com/DX2G2AdxUb7sGPE-zLRa41-MCk0。
知道什么可能导致未优化的基准测试运行速度提高 4 倍吗?
不幸的是,我看不到生成的程序集;不知道问题出在哪里(“记录反汇编”框已选中,但对我的运行没有影响)。此外,当我使用 Google Benchmark 在本地运行基准测试时,结果与预期一致,即优化后的基准测试运行得更快。
我还尝试比较 Compiler Explorer 中的两种变体,未优化的变体似乎执行了更多指令:https ://godbolt.org/z/I4a171 。