.Net 如何在不显着影响性能的情况下检查数组边界?
我想在 C 和 C++ 代码中使用这种技术。
您可以使用多种技术来检查数组边界,同时最大限度地减少对性能的影响:
通过进行无符号比较,您只需检查数组的上限(下限始终为 0)。
一旦你检查了一个绑定到一个没有改变的变量的数组,你就不需要再次检查它了。例如,如果您有,即使数组被访问两次a[i] = a[i] + 1
,您也只需要检查一次。i
当您知道数组索引变量永远不会超出数组的边界时,您就不需要检查了。例如,如果您有for (int i = 0; i < a.Length; i++) a[i] = 0;
,您就知道它i
始终是数组的有效索引a
,并且不需要检查。
检查边界只是做一个简单的比较,它非常快,但它当然会对性能产生影响(因为它正在做其他事情)。每组之前都会发生这样的事情:
if (array.Length <= i)
throw new IndexOutOfRangeException("...");