在我们的代码库中,我们期望字符串在编译的二进制文件中只存在一次。我观察到
-fsanitize=地址
可以在可执行文件中生成重复的字符串。这破坏了我们的代码。
以下 godbolt 示例演示了该问题https://godbolt.org/z/G5edcnr5e。
我的问题是这是预期行为还是编译器问题?
我正在使用gcc 8.3.0并启用了-ffast-math的以下代码来进行x86交叉编译:
#include <cmath>
double diff_double(double in)
{
auto tmp = 10 * std::log10(1. * 15e3);
return tmp - (10 * std::log10(1. * in));
}
int main()
{
return diff_double(15e3) == 0.;
}
Run Code Online (Sandbox Code Playgroud)
在执行时,我得到的返回值为0,因为针对“ tmp”的编译器优化结果与运行时结果不同。
这是有效的行为吗?
Godbold:https://godbolt.org/z/g2sev7
谢谢你的帮助