假设我的程序中有一个对性能非常关键的循环,我需要检查一个点是否在矩形内,但我知道在编译时下限始终为 0,如下所示:(x >= 0 && y >= 0 && x < width && y < height)
我可以通过将 x 和 y 类型双关为无符号整数来消除前两个比较吗(例如使用类似的东西)reinterpret_cast<>()
or a union
在 C++ 中),因为符号位将保证任何负数都会变成unsigned int
大到足以无法通过边界检查?如果是这样,您将如何用 C++ 或其他语言实现它?通过这样做你能获得任何性能提升吗?
是的,当您测试有符号整数并且下限为零时,这是一个完全有效的优化。事实上,这是一种常见的优化,您的编译器几乎肯定会自动执行此操作;自己混淆代码很可能是毫无意义的过早优化。
我刚刚在 GCC 4.9 上对此进行了测试,并通过检查生成的汇编代码确认它在以下位置自动执行此优化-O1
以上。我希望所有现代编译器都能这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)