|
|
1
3
因为您说您的代码在x86-64和其他指令集上按预期工作,但在i686上中断,但只有一些优化级别,所以可能的罪魁祸首是 x86 extended precision . 在x86上,浮点指令存储寄存器的结果比那些值随后存储在内存中时的精度更高。因此,当编译器可以重新使用已经加载到寄存器中的相同值时,结果可能与必须保存和重新加载该值时不同。打印值可能需要保存并重新加载。 这是一个 well-known non-bug in GCC .
GCC提供
不过,正如上面提到的,它不会自动让您的代码和其他指令集上的代码一样工作。您可能需要修改代码以显式地将结果存储在变量中。 |
|
|
gd1234 · 编译器会知道跳过这个循环吗? 2 年前 |
|
|
ChrisB · 为什么Rust不为内存布局重新排序枚举中的字段? 2 年前 |
|
|
Hans · 避免在C++中优化未使用的变量? 2 年前 |