Stu*_*ude 12 c++ int performance type-punning integer-arithmetic
假设我的程序中有一个非常性能关键的循环,我需要检查一个点是否在矩形内,但我知道在编译时下限始终为0,如下所示: (x >= 0 && y >= 0 && x < width && y < height)
我可以消除前两个比较的类型双关x和y的无符号整数(例如喜欢的东西reinterpret_cast<>()
或union
用C++),因为符号位将保证任何负数会变成一个unsigned int
足够大的失败边界检查?如果是这样,您将如何用C++或其他语言实现它?这样做可以获得任何性能提升吗?
Ros*_*ith 12
是的,当您测试有符号整数并且下限为零时,它是完全有效的优化.实际上,这是一种常见的优化,您的编译器几乎肯定会自动执行此操作; 通过自己动手来模糊代码很可能是一个毫无意义的过早优化.
我刚刚在GCC 4.9上对此进行了测试,并通过检查生成的汇编代码确认它自动执行此优化-O1
.我希望所有现代编译器也能这样做.
归档时间: |
|
查看次数: |
513 次 |
最近记录: |