2010-06-28 5 views
17

Массив Perl представляет собой абстрактный тип данных. Каков внутренний механизм для массива Perl? Он реализован с помощью динамического массива или связанного списка? Поскольку элементы массива имеют произвольный доступ, я бы предположил динамический массив указателей, или ссылки на скаляры имеют смысл. Тем не менее, при операции сдвига и смещения в начале массива массив должен будет перемещать все его элементы с помощью этих операций? звук неэффективен для меня. Любая мысль?Как реализованы массивы в Perl?

ответ

23

Посмотрите на это: http://www.perlmonks.org/?node_id=17890

(взятый оттуда :)

Perl реализует списки с массивом и первые/последние смещения элементов. Массив распределяется больше, чем необходимо, с смещениями, первоначально указывающими в середине массива, поэтому есть место для роста в обоих направлениях (unshifts и push/inserts) до того, как потребуется перераспределение базового массива. Следствием этой реализации является то, что все операторы примитивного списка perl (вставка, выборка, определение размера массива, push, pop, shift, unshift и т. Д.) Выполняются в O (1) раз.

+0

Спасибо за ссылку. Это отвечает на мой вопрос. –

6

Типы задокументированы в perlguts (см. Perl Internals для соответствующей документации) - и являются AV для массивов и HV для хешей.

Смежные вопросы