mmap vs malloc
Có bộ nhớ động trong C và điều này chỉ ra sự phân bổ bộ nhớ trong ngôn ngữ lập trình C thông qua một tập hợp các hàm có trong thư viện chuẩn C. Một trong số đó là malloc, dùng để chỉ cấp phát bộ nhớ. Trong hệ thống UNIX có mmap, dùng để chỉ hệ thống ánh xạ bộ nhớ đi kèm với I / O duy nhất của riêng nó. Hai (mmap và malloc) này sẽ ở mệnh giá thực hiện cùng chức năng nhưng sự xem xét kỹ lưỡng hơn cho thấy một số khác biệt. Những khác biệt này, phát sinh từ chức năng, được nêu dưới đây.
Sự khác biệt
Trước hết, điều quan trọng là phải xác định liệu có bất kỳ bằng chứng nào cho thấy rằng có sự ngột ngạt đáng kể của bộ nhớ có sẵn hay không. Điều này được thực hiện thông qua việc đo lường hiệu suất của chương trình đối với việc quản lý bộ nhớ .
Giao diện cấp phát bộ nhớ chính là malloc. Đây là lớn nhất trong thư viện C. Một phần của mã quản lý chứa trong đó là mmap. Khi malloc đang chạy, nó tập hợp tất cả các cơ sở hệ thống có sẵn. Các phương tiện hệ thống bổ sung có thể được huy động thông qua kernel, đây là một trong những chiến lược quản lý bộ nhớ mà các hệ thống sử dụng để đảm bảo rằng có sự phân bổ bộ nhớ thỏa đáng. Tuy nhiên, quá trình này không đơn giản và đã được thực hiện phức tạp vì lý do duy nhất là ngăn mọi người tạo các chương trình đơn giản có thể vô tổ chức phân bổ bộ nhớ và do đó tạo ra hiệu suất kém.
'mmap' mặt khác là một cuộc gọi hệ thống có trách nhiệm và yêu cầu hạt nhân tìm một vùng không sử dụng và tiếp giáp trong địa chỉ của ứng dụng đủ lớn để cho phép ánh xạ một vài trang bộ nhớ. Ngoài ra còn có việc tạo ra các cấu trúc quản lý bộ nhớ ảo mà thực tế không thể dẫn đến một segfault.
Malloc thường hoạt động trong hầu hết các quy trình quản lý bộ nhớ. Trong trường hợp chương trình yêu cầu bộ nhớ bổ sung, điều này được mượn từ HĐH. Mặt khác, Mmap sử dụng một chuyển đổi ngữ cảnh chuyển đổi thành vùng đất hạt nhân.
Malloc phù hợp nhất để phân bổ bộ nhớ trong bất kỳ ứng dụng nào chạy trên hệ thống trái ngược với việc sử dụng mmap. Đây là những gì bắt buộc phải xảy ra theo mặc định, ngoài những trường hợp đặc biệt khi nó có thể được cho phép.
Mmap có thể được sử dụng để tăng tốc độ phản hồi được cung cấp bởi các ứng dụng. Tuy nhiên, điều này không được khuyến khích vì cuối cùng, họ hy sinh một số byte cho các trang để ứng dụng có thể chạy trơn tru. Mặc dù ban đầu nội dung dữ liệu có vẻ nhỏ, ngoại suy nó khi nhiều ứng dụng muốn chạy có thể có hiệu lực làm chậm hệ thống hơn nữa.
Sau khi đo hiệu suất và mức độ sử dụng tài nguyên, nên đánh giá kỹ lưỡng việc sử dụng dữ liệu của tất cả các ứng dụng chạy trên hệ thống. Nếu tuổi thọ của các ứng dụng đang chạy có thể được hiển thị, nó có thể trở nên tốt hơn.
Việc sử dụng mmap để phân bổ bộ nhớ đi kèm với nhược điểm là việc phân bổ và phân bổ dữ liệu trong các khối rất tốn kém. Điều này là do dữ liệu được chia thành nhiều khu vực và cũng từ chối mmap khi thực hiện các cuộc gọi hệ thống.
Mmap có lợi thế hơn malloc vì bộ nhớ được sử dụng bởi mmap ngay lập tức được trả về HĐH. Bộ nhớ được sử dụng bởi malloc không bao giờ được trả lại trừ khi có ngắt đoạn dữ liệu. Bộ nhớ này được lưu giữ đặc biệt để được sử dụng lại.
Tóm lược
'malloc' là viết tắt của điểm cấp phát bộ nhớ chính
Một hệ thống mmap gọi và yêu cầu một hạt nhân tìm các vùng không sử dụng trong các địa chỉ ứng dụng có thể chứa ánh xạ của một số trang bộ nhớ
Mmap không được khuyến nghị để phân bổ bộ nhớ vì nó phân chia bộ nhớ khả dụng và không thể thực hiện các cuộc gọi hệ thống
Một lợi ích của mmap so với malloc là sự sẵn có của bộ nhớ, trái ngược với bộ nhớ malloc, được sử dụng lại.