Có một nhược điểm nào đó không, tức là có bộ nhớ ứng dụng bao gồm nhiều khối tại các địa chỉ cách xa nhau hơn về mặt lý thuyết có thể đạt được nếu tất cả bộ nhớ ứng dụng được phân bổ thành một khối lớn?
Bạn sẽ phải:
nhìn vào bộ nhớ ảo và vật lý là gì và cách chúng được ánh xạ.
xem nếu bộ nhớ đệm được thực hiện ở lớp ảo hoặc vật lý trên kiến trúc của bạn.
xem hệ điều hành của bạn làm mọi thứ như thế nào
Liệu bộ nhớ vật lý bị phân mảnh có vấn đề? Chỉ khi nó dẫn đến các bản đồ ảo đến vật lý phức tạp hơn (mmu, v.v.) Một khối ảo liền kề với vật lý không liền kề, mới có thể dẫn đến một bản đồ tra cứu phức tạp hơn nhiều. Linux có nhiều kích cỡ trang khác nhau mà nó có thể sử dụng, nó sẽ cố gắng sử dụng kích thước lớn nhất có thể (để phù hợp nhất với malloc). Trên hệ thống Debian jessie với kernel 4.6.0-0 amd64, tôi có kích thước trang là 4k (154964 đang sử dụng), 2M (3753 đang sử dụng) và 1G (1 đang sử dụng).
Bộ nhớ ảo bị phân mảnh có vấn đề? Tôi không thể thấy điều đó, nếu quá trình yêu cầu một số khối có nhiều malocs, thì nó sẽ xem chúng là riêng biệt, ngay cả khi liền kề. Một maloc phải tiếp giáp trong ảo. Hệ thống an ninh, có thể nhưng bảo vệ các khối giữa mỗi khối bị sai lệch, do đó ngăn chặn chúng liền kề nhau.
Trên Linux, rất nhiều thứ sẽ được chia sẻ giữa các quy trình: Nếu cùng một tệp thực thi, thì chúng sẽ chia sẻ tất cả các khối chỉ đọc của tệp thực thi (văn bản, dữ liệu-ro, v.v.). Họ cũng sẽ chia sẻ dữ liệu khởi tạo (dữ liệu), cho đến khi một trong số họ thay đổi một trang, sau đó trang này được sao chép. Điều tương tự cũng được thực hiện cho tất cả các thư viện được liên kết động, vì vậy chúng sẽ chia sẻ rất nhiều trong số này. Ngoài ra các tệp trên đĩa là trao đổi cho bộ nhớ này, vì vậy nó sẽ không bận tâm đến việc đọc dữ liệu cho đến khi nó cần (chương trình sẽ bắt đầu chạy mà không có dữ liệu nào được đọc, điều này sẽ dẫn đến lỗi ram và một trang được đọc trong, sau đó chương trình sẽ chạy, cho đến khi có một lỗi khác, v.v.). Nếu thiếu ram, một trang có thể bị hủy, nó có thể được đọc lại sau (không cần phải trao đổi nó). Điều này có thể gây ra nhiều đĩa đọc khi bộ nhớ thấp, dẫn đến khởi động chậm hơn.
(một số kiến trúc bộ nhớ đệm bộ nhớ cache: đây là bộ nhớ rõ nhất trong đó nó cần phải nhanh, bộ nhớ đệm vật lý ở các cấp độ khác, nơi nó cần phải có hiệu quả bộ nhớ.).