union
{
Uint32 Integer;
Float32 Real;
} Field;
我必须使用那个联合来实现一点 IEEE 技巧,这会破坏严格的混叠吗?GCC 没有发出任何警告(使用 GCC 4.5 和 4.6 进行了尝试,即使使用了迂腐的严格别名,但据我所知,GCC 并不能很好地捕捉严格的别名规则违规行为(大量误报/误报)。
Field A;
A.Integer = (Value1 & B) || Value2;
return A.Real;
那是我目前正在使用的片段,它似乎可以正常工作而没有任何警告,但某些编译器优化可能会出现副作用或未定义的行为。因此,如果那段代码在某些情况下可能不安全,我将努力将其删除。
此外,我假设这段代码需要将数据从标准寄存器移动到大多数现代 CPU 上的浮点寄存器(只是对此感到好奇),这涉及到与旧 CPU 相关的一些额外周期,对吗?
上面的代码不打算做优化,所以不要贬低我滥用优化,上面的代码是我获得某个结果的最简单方法(幸运的是,最简单的方法似乎也是最快的我的情况!),如果结果不安全,那么我将使用较慢的方法。
提前致谢