境界チェック
デフォルトでは、Rust でのスライスやベクターなどのコンテナー型へのアクセスには 境界チェックが伴います。これはパフォーマンスに影響する可能性があります。たとえばホットループ内などです。 ただし、影響する頻度は予想より少ないかもしれません。
コンテナーの長さをコンパイラーが把握できるようにコードを変更し、 境界チェックを最適化で取り除けるようにする安全な方法はいくつかあります。
- ループ内の直接的な要素アクセスを、イテレーションを使用する形に置き換える。
- ループ内で
Vecにインデックスアクセスする代わりに、ループの前にVecのスライスを作成し、 ループ内ではそのスライスにインデックスアクセスする。 - インデックス変数の範囲に対するアサーションを追加する。 例 1, 例 2。
これらを機能させるのは難しい場合があります。Bounds Check Cookbook では、このトピックについて さらに詳しく説明しています。
最後の手段として、unsafe なメソッドである get_unchecked と
get_unchecked_mut があります。