web-dev-qa-db-ja.com

Rust vector( `Vec <T>`)対array( `[T; n]`)のパフォーマンス

Rustでベクトルと配列を使用すると、パフォーマンスの面でどれだけの損失がありますか?

パフォーマンスとは、要素アクセスの速度または反復の速度です。

3
user89

どちらも線形連続配列にデータを格納します。ここで、アクセスまたは反復は両方ともO(1)演算であるため、パフォーマンスに違いはありません。ベクトルが遅い場合の唯一のケースは、おそらくいくつかの小さなリストの場合です。配列は現在のスタックフレームのスタックに格納されているため、データはすでにCPUキャッシュに読み込まれている可能性が高いです。ベクターOTOHはデータをヒープに格納するため、最初にアクセスするまでデータをキャッシュで利用できません。

最初に配列のアドレスをロードする必要があるため、最初のメモリアクセスも低速になる可能性があるため、Vectorにはもう1つのレベルのリダイレクトがありますが、それはごくわずかです

ベクトルがはるかに悪いもう1つのケースは、ベクトルと多次元配列のベクトルを使用する場合です。これは、各ベクトルが個別に割り当てられ、メモリの周りにあり、キャッシュに適さないためです。参照 vec vs配列のアクセス時間

参照 メモリとCPUの使用法についての配列とvecの違い

4
phuclv