2010-06-28 38 views
17

Mảng Perl là một kiểu dữ liệu trừu tượng. Cơ chế nội bộ cho mảng Perl là gì? Nó được thực hiện với mảng động hoặc danh sách liên kết? Vì các phần tử mảng có truy cập ngẫu nhiên, tôi sẽ giả sử một mảng động của các con trỏ, hoặc các tham chiếu đến các vô hướng có ý nghĩa. Tuy nhiên, với phép dịch chuyển và unshift ở đầu mảng, liệu mảng có phải di chuyển tất cả các phần tử của nó bằng các hoạt động này không? âm thanh không hiệu quả với tôi. Bất cứ suy nghĩ nào?Các mảng được triển khai trong Perl như thế nào?

Trả lời

23

Có xem xét này: http://www.perlmonks.org/?node_id=17890

(lấy từ đó :)

Perl thực hiện danh sách với một mảng và đầu tiên/offsets yếu tố cuối cùng. Mảng được phân bổ lớn hơn cần thiết với các offset ban đầu chỉ ở giữa mảng để có chỗ phát triển theo cả hai hướng (unshifts và push/insert) trước khi phân bổ lại mảng cơ bản là cần thiết. Hậu quả của việc thực hiện này là tất cả các toán tử danh sách nguyên thủy của perl (chèn, lấy, xác định kích thước mảng, đẩy, pop, shift, unshift, vv) thực hiện trong thời gian O (1).

+0

Cảm ơn bạn đã liên kết. Nó trả lời câu hỏi của tôi. –

6

Các loại được ghi lại trong perlguts (xem Perl Internals cho tài liệu liên quan) - và là AV cho mảng và HV cho băm.

Các vấn đề liên quan