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?
17
A
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).
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
- 1. Các mảng được triển khai trong java như thế nào?
- 2. OpenID được triển khai như thế nào?
- 3. HttpSession được triển khai như thế nào?
- 4. Các khối try/catch được triển khai như thế nào?
- 5. Các tham chiếu yếu được triển khai như thế nào?
- 6. Các mutex được triển khai như thế nào?
- 7. Chuỗi string.find được triển khai như thế nào trong CPython?
- 8. Các cụm từ thông dụng được triển khai như thế nào trong .NET?
- 9. Máy tính Google được triển khai như thế nào?
- 10. Atan2 được triển khai bằng .NET như thế nào?
- 11. C# Generics được triển khai như thế nào?
- 12. IO không chặn được triển khai như thế nào?
- 13. Bản đồ băm JavaScript được triển khai như thế nào?
- 14. Các ứng dụng Java được triển khai như thế nào trong "thế giới thực"?
- 15. Facebook Chat Heads được triển khai như thế nào?
- 16. Thuộc tính phụ thuộc được triển khai như thế nào?
- 17. Phạm vi Lexical được triển khai như thế nào?
- 18. Arrays.sort (Object [] a) - được triển khai như thế nào?
- 19. GMail triển khai Comet như thế nào?
- 20. GetHashCode() được triển khai cho Int32 như thế nào?
- 21. LLVM isa <> được triển khai như thế nào?
- 22. Các mảng được truyền như thế nào?
- 23. C-như mảng trong perl
- 24. Bảng băm được triển khai nội bộ bằng các ngôn ngữ phổ biến như thế nào?
- 25. Các chỉ mục thông thường và tổng hợp được triển khai trong RDB như thế nào?
- 26. Bạn sẽ triển khai đuôi hiệu quả như thế nào?
- 27. Triển khai ứng dụng Perl
- 28. Việc triển khai các ứng dụng .NET so với việc triển khai các ứng dụng web Java như thế nào?
- 29. Làm cách nào để triển khai API RESTful trong Perl?
- 30. Lớp Object được triển khai như thế nào (các phương thức như hashCode và các trường nội bộ)?
Cảm ơn bạn đã liên kết. Nó trả lời câu hỏi của tôi. –