2010-06-28 13 views
17

Das Perl-Array ist ein abstrakter Datentyp. Was ist der interne Mechanismus für das Perl-Array? Wird es mit dynamischem Array oder verknüpfter Liste implementiert? Da die Array-Elemente einen wahlfreien Zugriff haben, würde ich ein dynamisches Array von Zeigern annehmen, oder Verweise auf Skalare sind sinnvoll. Bei einer Verschiebe- und Unshift-Operation am Kopf des Arrays müsste das Array jedoch alle seine Elemente mit diesen Operationen bewegen? klingt für mich ineffizient. Jeder Gedanke?Wie werden Arrays in Perl implementiert?

Antwort

23

Werfen Sie einen Blick auf diesem: http://www.perlmonks.org/?node_id=17890

(von dort genommen :)

Perl-Listen mit einem Array und ersten/letzten Element Offsets implementiert. Das Array wird mit den Offsets, die ursprünglich in die Mitte des Arrays zeigen, größer als benötigt, so dass Raum in beiden Richtungen wachsen kann (Unshifts und Push/Inserts), bevor eine Neuzuordnung des zugrunde liegenden Arrays erforderlich ist. Die Folge dieser Implementierung ist, dass alle primitiven Listenoperatoren von Perl (Einfügen, Holen, Bestimmen der Arraygröße, Drücken, Knallen, Verschieben, Unshift usw.) in O (1) -Zeit ausgeführt werden.

+0

Danke für den Link. Es beantwortet meine Frage. –

6

Die Typen sind in der perlguts dokumentiert (siehe Perl Internals für zugehörige Dokumentation) - und sind AV für Arrays und HV für Hashes.

Verwandte Themen