18

Perl 配列は抽象データ型です。Perl 配列の内部メカニズムは何ですか? 動的配列または連結リストで実装されていますか? 配列要素にはランダム アクセスがあるため、ポインターの動的配列またはスカラーへの参照が理にかなっていると思います。ただし、配列の先頭でシフトおよびシフト解除操作を行うと、配列はこれらの操作ですべての要素を移動する必要がありますか? 私には非効率に聞こえます。何か考えはありますか?

4

2 に答える 2

24

これを見てください: http://www.perlmonks.org/?node_id=17890

(そこから撮影:)

Perl は、配列と最初/最後の要素のオフセットを使用してリストを実装します。配列は、元は配列の中央を指すオフセットで必要以上に大きく割り当てられているため、基になる配列の再割り当てが必要になる前に、両方向 (シフト解除とプッシュ/挿入) に拡張する余地があります。この実装の結果は、perl のすべてのプリミティブ リスト演算子 (挿入、フェッチ、配列サイズの決定、プッシュ、ポップ、シフト、シフト解除など) が O(1) 時間で実行されることです。

于 2010-06-28T06:04:21.703 に答える
6

型はperlgutsに文書化されています(関連文書についてはPerl Internalsを参照してください) - 配列の場合は AV、ハッシュの場合は HV です。

于 2010-06-28T06:34:36.420 に答える