我在.NET的List源码中偶然发现了这段代码:
// Following trick can reduce the range check by one
if ((uint) index >= (uint)_size) {
ThrowHelper.ThrowArgumentOutOfRangeException();
}
显然,这比if (index < 0 || index >= _size)
更有效率 (?)。
对于这个技巧背后的原理,我很好奇。单一分支指令真的比两个转换为uint
更昂贵吗?还是有其他优化措施可以使此代码比额外的数值比较更快?
针对问题的本质:是的,这是微小的优化,不,我没有打算在我的代码中随处使用它 - 我只是好奇;)
int
到uint
的类型转换):http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in - Tim Schmelter_size
永远不会是负数。 - BlueRaja - Danny Pflughoeft