1

.Net 如何在不显着影响性能的情况下检查数组边界?

我想在 C 和 C++ 代码中使用这种技术。

4

2 回答 2

1

您可以使用多种技术来检查数组边界,同时最大限度地减少对性能的影响:

  1. 通过进行无符号比较,您只需检查数组的上限(下限始终为 0)。

  2. 一旦你检查了一个绑定到一个没有改变的变量的数组,你就不需要再次检查它了。例如,如果您有,即使数组被访问两次a[i] = a[i] + 1,您也只需要检查一次。i

  3. 当您知道数组索引变量永远不会超出数组的边界时,您就不需要检查了。例如,如果您有for (int i = 0; i < a.Length; i++) a[i] = 0;,您就知道它i始终是数组的有效索引a,并且不需要检查。

于 2013-03-25T12:59:13.343 回答
1

检查边界只是做一个简单的比较,它非常快,但它当然会对性能产生影响(因为它正在做其他事情)。每组之前都会发生这样的事情:

if (array.Length <= i)
    throw new IndexOutOfRangeException("...");
于 2013-03-25T12:55:05.150 回答