Các mảng có thể phân bổ có thể dẫn đến mã hiệu quả hơn vì các mảng sẽ tiếp giáp nhau. Đặc biệt nếu mảng được truyền cho một chương trình con, tiếp giáp có thể ngăn chặn sự cần thiết của trình biên dịch tạo ra một bản sao tạm thời.
Đối với các biến cục bộ trong chương trình con (không có thuộc tính SAVE) (đối với Fortran 95 và cao hơn), mảng phân bổ sẽ tự động được phân bổ khi thoát khỏi chương trình con, tránh rò rỉ bộ nhớ. Rò rỉ bộ nhớ là không thể với allocatables, ngoại trừ trong ý nghĩa của lập trình viên không deallocating một mảng mà không còn cần.
Với con trỏ, bạn có thể gán lại con trỏ, để lại một số bộ nhớ không thể truy cập và bị mất - một dạng rò rỉ. Nếu một phân bổ sẽ thực hiện công việc, tôi khuyên bạn nên sử dụng phương thức đó thay vì một con trỏ.
Một số lý do để sử dụng con trỏ: lấy một phần của mảng hoặc tạo cấu trúc dữ liệu chẳng hạn như danh sách được liên kết. Với mục đích tạo ra một mảng kích thước được xác định tại thời gian chạy, tôi sẽ sử dụng một allocatable.
Nguồn
2010-02-19 23:41:11
Tại sao bạn không thể rò rỉ bộ nhớ? Bạn không phải 'DEALLOCATE' bất kỳ mảng nào bạn đã thực hiện với' allocatable'? –
@Carl - ý của bạn là "phân bổ" ... – Rook