c – 可以将签名的无符号整数进行排序,通过消除> =比较的需要,可以更快地检查边界.

前端之家收集整理的这篇文章主要介绍了c – 可以将签名的无符号整数进行排序,通过消除> =比较的需要,可以更快地检查边界.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我在我的程序中有一个真正的性能关键环节,我需要检查一个点是否在一个矩形内,但是我在编译时知道下限总是为0,如下所示:(x> = 0&&> = 0&& x< width&& y< height) 我可以通过对x和y进行类型冲突来排除前两个比较,以无符号整数(例如,在C)中使用类似于reinterpret_cast()或一个联合的东西,因为符号位将保证任何负数将变为无符号int足够大,无法检查边界?如果是这样,你将如何用C或其他语言来实现?可以通过这样做获得任何性能改进吗?

解决方法

是的,当您测试有符号整数,下限为零时,这是一个非常有效的优化.实际上,这是一个常见的优化,您的编译器几乎肯定会自动执行;通过自己的方式模糊你的代码很可能是一个无意义的过早优化.

我刚刚在GCC 4.9上测试了这一点,并通过检查生成的汇编代码在-O1及以上自动执行此优化来确认.我希望所有现代编译器都这样做.

原文链接:https://www.f2er.com/c/114923.html

猜你在找的C&C++相关文章