Câu trả lời ngắn gọn là không.
Trên một hệ thống mà không ASLR (ví dụ XP), tải một DLL tại một địa chỉ không được ưu tiên có một số chi phí:
- Phần di dời đã được phân tích cú pháp và fixups phải được áp dụng cho toàn bộ hình ảnh .
- Hành vi áp dụng bản sửa lỗi gây ra lỗi sao chép khi viết tương đối đắt tiền và cũng buộc các trang phải đọc từ đĩa ngay cả khi chúng không được tham chiếu bởi chính ứng dụng.
- Mọi quá trình tải tệp DLL tại địa chỉ không ưa thích đều nhận được một bản sao riêng tư của mỗi trang được ghi vào, dẫn đến tăng mức sử dụng bộ nhớ.
Mục 2 và 3 là chi phí lớn nhất và là lý do chính khiến các tệp DLL được sử dụng lại cần thiết.
Với ASLR, bản sửa lỗi được áp dụng một cách minh bạch bởi hệ điều hành, làm cho nó trông giống như DLL thực sự được tải tại địa chỉ ưa thích của nó. Không có lỗi sao chép trên ghi và không có trang quá trình riêng tư nào được tạo. Ngoài ra, bản sửa lỗi chỉ được áp dụng cho các trang thực sự được ứng dụng truy cập chứ không phải toàn bộ hình ảnh, điều đó có nghĩa là không có dữ liệu bổ sung nào được đọc từ đĩa. Ngoài ra, các lược đồ rebasing thủ công không thể ngăn chặn tất cả xung đột địa chỉ cơ sở (ví dụ, DLL từ các nhà cung cấp khác nhau có thể xung đột với nhau hoặc DLL của hệ điều hành có thể tăng kích thước do hotfix và tràn vào một phạm vi dành riêng cho một số DLL khác, v.v.). ASLR hiệu quả hơn trong việc xử lý các vấn đề này, vì vậy khi xem xét toàn bộ hệ thống, ASLR thực sự có thể cải thiện hiệu suất.
Nguồn
2010-09-08 05:42:46
Tôi phải thừa nhận, tôi quan tâm. ASLR dường như đã đảo ngược nhiều thập kỷ hiệu suất cũ từ hệ điều hành. Và tôi biết Windows STILL mất quá nhiều thời gian để khởi động. –