配列とスライス: アクセス速度
要素へのアクセスでは、配列の方がスライスよりも高速であるとよく考えられます。しかし、ベンチマーク テストでは、ローカル スライスのパフォーマンスがローカル配列よりも優れているという驚くべき結果が明らかになりました。
テストでは、グローバルおよびローカルのスライスと配列へのアクセスという 4 つの関数のベンチマークが行われました。結果を分析すると、グローバル スライスは実際にグローバル アレイよりもわずかに遅く、予想どおりでした。ただし、ローカル スライスはローカル配列よりも大幅にパフォーマンスが優れていました。
理由
ローカル配列とスライスのベンチマーク関数の両方について amd64 アセンブリを調べると、顕著な違いが現れます。配列バージョンは、配列アクセス操作中に配列のアドレスをメモリに繰り返しロードしますが、スライス バージョンは、メモリから一度ロードした後、レジスタ上で排他的に計算を実行します。
結論
これは、スライスの要素へのアクセス (基礎となる配列の逆参照による) に含まれる追加の手順が、ローカル変数にとって重大なボトルネックではないことを示しています。このシナリオでは、スライスはレジスタをより効率的に使用するため、より高速なアクセスを提供します。この結果は、大きな配列やスライスの場合、または関数の引数として渡された場合には当てはまらない可能性があることに注意してください。
以上が配列 vs. スライス: どちらがより高速な要素アクセスを提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。