Sự khác biệt giữa mmap và malloc Khác biệt giữa

Anonim

mmap vs malloc

Có bộ nhớ động trong C và điểm này để 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 chức năng có trong thư viện chuẩn C. Một trong số đó là malloc, đề cập đến phân bổ bộ nhớ. Trong hệ thống UNIX có mmap, trong đó đề cập đến một hệ thống ánh xạ bộ nhớ đi kèm với I / O độc đáo của riêng mình. Hai (mmap và malloc) sẽ có giá trị thực hiện các chức năng tương tự nhưng giám sát thêm 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 ra dưới đây.

-1->

Sự khác biệt

Trước hết, điều quan trọng là phải xác định liệu có bằng chứng nào cho thấy có sự ồn ào đáng kể của bộ nhớ. Điều này được thực hiện thông qua đo lường hiệu suất của chương trình chống quản lý bộ nhớ.

Giao diện cấp phát bộ nhớ chính là malloc. Đây là thư viện 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 chạy, nó tập hợp tất cả các cơ sở hệ thống có sẵn. Các cơ chế hệ thống bổ sung có thể được huy động thông qua hạt nhân, đâ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 là phức tạp vì lý do duy nhất để ngăn chặn người dân từ việc tạo ra các chương trình đơn giản có thể disorganize phân bổ bộ nhớ và do đó tạo ra hiệu suất kém.

Mặt khác, 'mmap' là một cuộc gọi hệ thống có tính phí 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 một ứng dụng đủ lớn để cho phép lập bản đồ của 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 có hiệu lực không thể dẫn đến một segfault.

Malloc thường hoạt động trong hầu hết quá 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ệ điều hành. Mặt khác, Mmap sử dụng một chuyển đổi ngữ cảnh chuyển đổi thành hạt nhân.

Malloc phù hợp nhất để phân bổ bộ nhớ trong bất kỳ ứng dụng nào đang chạy trên hệ thống như đối lập với việc sử dụng mmap. Đây là những gì được yêu cầu phải xảy ra theo mặc định, trừ trường hợp đặc biệt khi nó được phép.

Mmap có thể được sử dụng để tăng tốc độ đáp ứng được đưa ra bởi các ứng dụng. Tuy nhiên điều này là không nên vì nó kết thúc lên hy sinh một số byte để các trang để ứng dụng có thể chạy trơn tru. Mặc dù nội dung dữ liệu có vẻ như nhỏ ngay từ đầu nhưng việc ngoại suy khi nhiều ứng dụng muốn chạy có thể sẽ làm chậm hệ thống hơn nữa.

Sau khi đo hiệu suất và việc sử dụng các tài nguyên, cần phải đánh giá toàn diện 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 thời gian sống của các ứng dụng đang chạy có thể được cho thấy nó có thể trở nên tốt hơn.

Sử dụng mmap để phân bổ bộ nhớ đi kèm với bất lợi là việc phân bổ và deallocation dữ liệu trong khối là 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 từ việc thực hiện các cuộc gọi hệ thống.

Mmap là thuận lợi hơn malloc vì bộ nhớ sử dụng bởi mmap ngay lập tức trở lại hệ điều hành. Bộ nhớ được sử dụng bởi malloc không bao giờ được trả lại trừ khi có một đoạn dữ liệu bị phá vỡ. Bộ nhớ này đặc biệt được giữ lại để sử dụng lại.

Tóm lược

'malloc' là viết tắt của điểm phân bổ bộ nhớ chính

Một cuộc gọi hệ thống mmap và yêu cầu hạt nhân tìm các vùng không sử dụng trong địa chỉ ứng dụng có thể chứa bản đồ của một số trang bộ nhớ

Mmap không được khuyến cáo phân bổ bộ nhớ vì nó phân chia bộ nhớ có sẵn 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 trên malloc là sự sẵn có của bộ nhớ, ngược với bộ nhớ malloc, được sử dụng lại.