【发布时间】:2014-05-09 21:28:43
【问题描述】:
我正在运行一组比较不同 libc 字符串函数的基准测试。问题是 GCC 和 Clang 正在优化循环中的计算,因为这些函数被标记为“纯”和“常量”。有什么方法可以关闭优化或绕过它?
【问题讨论】:
-
clang 让你选择要执行的传球,用 gcc 我不太确定
-
对这些东西进行基准测试的最佳方法是使用结果。通常只需从输出中打印出一个数字就足够了。
-
对于纯/常量函数,您希望使用结果,但您还希望确保每次都使用不同的参数调用它们,否则编译器可能会执行一次调用。禁用编译器通道(@Marco 当然 gcc 允许它)太脆弱了(除非你选择 -O0)。您可以尝试自己声明这些 libc 函数(而不是包含标准头文件)并使用 -fno-builtin 进行编译,这样编译器就不会知道这些函数是纯/常量,但最好遵循 Mysticial 的建议。
-
谢谢马克。老实说,从来不需要那个。但很高兴知道。
标签: gcc optimization constants clang pure-function