说我在我的程序中有一个真正的
性能关键环节,我需要检查一个点是否在一个矩形内,但是我在编译时知道下限总是为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