.Netは、パフォーマンスに大きな影響を与えることなく、配列の境界をどのようにチェックしますか?
この手法をCおよびC++コードで使用したいと思います。
境界のチェックは単純な比較を行うだけです。これは非常に高速ですが、もちろんパフォーマンスに影響を与えます(他のことを行う場合と同様)。このようなことが各セットの前に発生します。
if (array.Length <= i)
throw new IndexOutOfRangeException("...");
パフォーマンスへの影響を最小限に抑えながら、配列の境界をチェックするために使用できるいくつかの手法があります。
符号なしの比較を行うことにより、配列の上限をチェックするだけで済みます(下限は常に0です)。
変更されていない変数に対してバインドされた配列をチェックしたら、再度チェックする必要はありません。たとえば、があれば、配列に2回アクセスしても、a[i] = a[i] + 1
チェックする必要があるのは1回だけです。i
配列インデックス変数が配列の境界を超えることは決してないことがわかっている場合は、チェックする必要はありません。たとえば、があればfor (int i = 0; i < a.Length; i++) a[i] = 0;
、それi
は常に配列への有効なインデックスa
であり、チェックする必要はありません。