Rustでベクトルと配列を使用すると、パフォーマンスの面でどれだけの損失がありますか?
パフォーマンスとは、要素アクセスの速度または反復の速度です。
どちらも線形連続配列にデータを格納します。ここで、アクセスまたは反復は両方ともO(1)演算であるため、パフォーマンスに違いはありません。ベクトルが遅い場合の唯一のケースは、おそらくいくつかの小さなリストの場合です。配列は現在のスタックフレームのスタックに格納されているため、データはすでにCPUキャッシュに読み込まれている可能性が高いです。ベクターOTOHはデータをヒープに格納するため、最初にアクセスするまでデータをキャッシュで利用できません。
最初に配列のアドレスをロードする必要があるため、最初のメモリアクセスも低速になる可能性があるため、Vectorにはもう1つのレベルのリダイレクトがありますが、それはごくわずかです
ベクトルがはるかに悪いもう1つのケースは、ベクトルと多次元配列のベクトルを使用する場合です。これは、各ベクトルが個別に割り当てられ、メモリの周りにあり、キャッシュに適さないためです。参照 vec vs配列のアクセス時間