Có mối quan hệ nhưng không hoàn toàn trực tiếp hoặc đơn giản.
Khi tệp DLL của bạn lần đầu tiên được sử dụng, nó sẽ được ánh xạ tới bộ nhớ. Điều đó không tải nó vào bộ nhớ, chỉ cần phân bổ một số không gian địa chỉ trong quá trình của bạn, nơi nó có thể/có thể được nạp khi/nếu cần thiết. Sau đó, các trang riêng lẻ của DLL được tải vào bộ nhớ thông qua phân trang theo yêu cầu - tức là khi bạn tham khảo một số không gian địa chỉ đã được cấp phát, mã (hoặc dữ liệu) được ánh xạ tới/những địa chỉ đó sẽ được tải nếu nó chưa có trong bộ nhớ.
Bây giờ, ánh xạ địa chỉ chiếm một không gian nhỏ (một trang 4K cho mỗi megabyte không gian địa chỉ được ánh xạ). Tất nhiên, khi bạn tải một số dữ liệu vào bộ nhớ, nó cũng sử dụng hết bộ nhớ. Tuy nhiên, lưu ý rằng nếu hầu hết các trang của bạn có thể/sẽ được chia sẻ giữa các quá trình, vì vậy nếu DLL của bạn được sử dụng bởi 5 quy trình khác nhau cùng một lúc, nó sẽ được ánh xạ 5 lần (tức là, một lần cho mỗi quá trình sử dụng nó). nhưng vẫn chỉ có một bản sao vật lý trong bộ nhớ (ít nhất là bình thường).
Giữa những điều đó, có thể hơi khó khăn ngay cả khi bạn xác định chính xác ý nghĩa của việc tiêu thụ bộ nhớ của một DLL cụ thể.
Nguồn
2012-03-18 20:39:29
Nếu dll thực hiện phân bổ động, bạn có đang cố gắng bao gồm không? –
Bạn có thể đưa ra một ví dụ không? Cột "chiều dài" có nhỏ hơn kích thước tệp không? Lớn hơn? Làm tròn lên tới bội số tiếp theo của 4K? Mối quan hệ giữa hai con số là gì? –
@Andre: cung cấp cho bạn một ví dụ, MSVCR80 là 632565 byte trên đĩa trên TMExtention, nó hiển thị 634880. Ngoài ra TAExtention cho thấy hai bản sao của MSVCP71.dll với độ dài khác nhau. Một là 503808 số khác là 352256 trong khi trên đĩa nó thực sự là 503808 (giống như một được liệt kê trong TMExtention). – Gob00st