2010-06-28 14 views
17

L'array Perl è un tipo di dati astratto. Qual è il meccanismo interno per l'array Perl? È implementato con array dinamico o elenco collegato? Dato che gli elementi dell'array hanno un accesso casuale, io presumerei una matrice dinamica di puntatori, oppure i riferimenti agli scalari hanno senso. Tuttavia, con l'operazione di shift e unshift all'inizio dell'array, l'array deve spostare tutti i suoi elementi con queste operazioni? mi sembra inefficiente. Qualche pensiero?Come vengono implementati gli array in Perl?

risposta

23

Date un'occhiata a questo: http://www.perlmonks.org/?node_id=17890

(preso da lì :)

Perl implementa liste con un array e primi/ultimi offset elemento. L'array viene allocato più grande del necessario con gli offset che puntano originariamente nel mezzo dell'array, quindi c'è spazio per crescere in entrambe le direzioni (unshifts e push/insert) prima che sia necessaria una ridistribuzione dell'array sottostante. La conseguenza di questa implementazione è che tutti gli operatori di primitive list di perl (inserimento, recupero, determinazione della dimensione dell'array, push, pop, shift, unshift, ecc.) Funzionano nel tempo O (1).

+0

Grazie per il collegamento. Risponde alla mia domanda. –

6

I tipi sono documentati nello perlguts (vedere Perl Internals per la documentazione correlata) - e sono AV per gli array e HV per gli hash.

Problemi correlati