Mmap vs Malloc: Sự khác biệt và so sánh

Trong lập trình C, có một bộ nhớ động trỏ đến việc phân bổ bộ nhớ trong thư viện chuẩn C thông qua một tập hợp các hàm. Malloc là một trong số đó, được sử dụng để cấp phát bộ nhớ.

Sau đó, có mmap. Điều đó được sử dụng như một hệ thống ánh xạ bộ nhớ có đầu vào và đầu ra duy nhất. Hai cái này cung cấp các chức năng giống nhau nhưng đào sâu hơn vào chủ đề này cho thấy một số khác biệt.

Chìa khóa chính

  1. mmap phân bổ bộ nhớ bằng cách ánh xạ các tệp hoặc thiết bị vào không gian địa chỉ, trong khi malloc phân bổ bộ nhớ từ heap.
  2. mmap cung cấp khả năng bộ nhớ dùng chung cho giao tiếp giữa các quá trình, trong khi malloc thì không.
  3. Bộ nhớ được phân bổ bởi mmap được tự động khởi tạo thành XNUMX, trong khi malloc có thể trả về bộ nhớ chưa được khởi tạo.

Mmap đấu với Malloc

Mmap là một cuộc gọi hệ thống ánh xạ một tệp hoặc thiết bị vào bộ nhớ. Nó trả về một con trỏ tới bộ nhớ được phân bổ có thể được sử dụng cho nhiều mục đích khác nhau, chẳng hạn như lưu trữ dữ liệu. Malloc là một hàm thư viện phân chia khối bộ nhớ có kích thước đã chỉ định và trả về một con trỏ tới byte đầu tiên của khối.

Mmap đấu với Malloc

Mmap trong điện toán là lệnh gọi hệ thống đa tác vụ POSIX ghi lại tất cả dữ liệu, tệp và thiết bị trong bộ nhớ của nó. Đây còn được gọi là phương pháp thuộc các tệp ánh xạ bộ nhớ và thực hiện sao chép dữ liệu vào bộ nhớ vật lý của nó, vì không thể đọc trực tiếp nội dung từ ổ đĩa.

Malloc là dạng viết tắt của thuật ngữ cấp phát bộ nhớ được sử dụng để cấp phát động một khối dữ liệu khổng lồ, liên quan đến kích thước đã chỉ định và khi thành công, nó trả về một con trỏ trỏ đến byte đầu tiên của bộ nhớ được cấp phát, nếu không thì trả về NULL .

Trong cơ chế cấp phát bộ nhớ thực tế, có nhiều thành tựu khác nhau có sẵn được sử dụng bởi Malloc.

Bảng so sánh

Các thông số so sánhbản đồMalloc
Định nghĩaMmap được đề cập đến một cuộc gọi hệ thống yêu cầu hạt nhân tìm một địa chỉ lớn để ánh xạ các trang.Malloc là giao diện cấp phát bộ nhớ chính tập hợp tất cả các tiện ích có sẵn trong hệ thống.
Chức năngMmap sử dụng công tắc ngữ cảnh và biến nó thành kernelland.Malloc phân bổ khối bộ nhớ trong apile.
Còn được gọi làMmap còn được gọi là cuộc gọi hệ thống.Malloc còn được gọi là giao diện cấp phát bộ nhớ chính.
Kết quảMmap không dẫn đến ảnh hưởng đến hiệu suất hệ thống khác.Malloc vô tổ chức và tạo ra hiệu suất kém của hệ thống.
Phù hợp nhất choMmap phù hợp nhất để tăng tốc quá trình phản hồi do ứng dụng đưa ra. Malloc phù hợp nhất để cấp phát bộ nhớ trong bất kỳ ứng dụng nào trong hệ thống.

Mmap là gì?

Mmap được gọi là lệnh gọi hệ thống Unix tuân thủ POSIX ánh xạ dữ liệu, tệp hoặc thiết bị vào bộ nhớ. Nó là một phương thức đầu vào, đầu ra của ánh xạ bộ nhớ.

Cũng đọc:  SmartThings vs Home Assistant: Sự khác biệt và so sánh

Một ánh xạ mới được tạo trong không gian địa chỉ ảo trong quá trình gọi. Trong addr, địa chỉ ban đầu của ánh xạ mới được tìm thấy và độ dài của ánh xạ được chỉ định bởi đối số độ dài (phải lớn hơn 0).

Nếu addr được tìm thấy là NULL, thì địa chỉ được chọn bởi hạt nhân, tạo ánh xạ, đây được coi là phương pháp dễ nhất để tạo ánh xạ mới.

Nếu địa chỉ không được tìm thấy là NULL, thì hạt nhân coi đó là dấu hiệu cho việc đặt ánh xạ vào một vị trí trên Linux.

Hạt nhân tìm ranh giới trang gần nhất và cố gắng tạo ánh xạ trong khu vực đó. Nếu hạt nhân tìm thấy một ánh xạ đã tồn tại trong khu vực, nó sẽ chọn một địa chỉ mới có thể phụ thuộc vào dấu hiệu mà hạt nhân đã giả định.

Kết quả của cuộc gọi này, địa chỉ của ánh xạ mới được gửi lại. Ngay sau khi cuộc gọi được trả lại, bộ mô tả tệp, fd, đóng ánh xạ ngay lập tức mà không làm mất hiệu lực.

Malloc là gì?

malloc() là một chức năng cấp phát bộ nhớ cấp phát các byte kích thước và gửi lại một con trỏ tới bộ nhớ được cấp phát. Bộ nhớ không được đặt về vị trí ban đầu.

Nếu tên byte kích thước là 0, thì NULL hoặc một con trỏ giá trị duy nhất được gửi bởi malloc(), sau này có thể được chuyển thành công thành công tới free().

Không gian bộ nhớ được trỏ bởi ptr, được giải phóng bởi hàm free(), hàm này được cho là được gửi lại bởi malloc(). Mặt khác, hành vi không xác định được cho là xảy ra nếu free (ptr) đã được gọi trước đó.

Cũng đọc:  VOB vs MPEG: Sự khác biệt và so sánh

Không có thao tác nào được thực hiện nếu tìm thấy ptr NULL. Nếu ptr được tìm thấy là NULL, thì giá trị của lệnh gọi bằng malloc (size) cho mọi giá trị của size; nếu nó tương đương với 0 và không tìm thấy ptr là NULL, thì giá trị cuộc gọi bằng free (ptr).

Chỉ khi ptr là NULL thì nó mới được gửi lại bởi lệnh gọi malloc() trước đó. Và khu vực được chỉ định đã được thay đổi, một (ptr) miễn phí đã được thực hiện.

Theo mặc định, một lạc quan Chiến lược cấp phát bộ nhớ được Linux tuân theo, điều đó có nghĩa là nếu malloc() gửi lại một giá trị không phải NULL, thì có khả năng bộ nhớ có thể bị mất.

Và nếu hệ thống bị thiếu bộ nhớ, thì một số quy trình sẽ bị phá hủy bởi kẻ giết người OOM.

Sự khác biệt chính giữa Mmap và Malloc

  1. Mmap được gọi là cuộc gọi hệ thống, trong khi Malloc là giao diện cấp phát bộ nhớ chính.
  2. Mmap giúp ánh xạ các trang trong khi Malloc phân bổ thiết bị và dữ liệu trong hệ thống.
  3. Mmap chuyển đổi ngữ cảnh chuyển đổi mặt khác, vào vùng nhân, Malloc phân bổ bộ nhớ trong một thiết bị.
  4. Mmap được ưu tiên để tăng tốc quá trình phản hồi, trong khi Malloc được ưu tiên để phân bổ bộ nhớ trong hệ thống.
  5. Mmap sau khi thực hiện không ảnh hưởng đến hiệu suất của bất kỳ ứng dụng hệ thống nào khác, ngược lại, Malloc làm xáo trộn hiệu suất để ngăn chặn những người có thể làm mất tổ chức hệ thống.
dự án
  1. https://www.usenix.org/publications/library/proceedings/als01/full_papers/ezolt/ezolt_html/
  2. https://www.usenix.org/publications/library/proceedings/als01/full_papers/ezolt/ezolt.ps

Cập nhật lần cuối: ngày 11 tháng 2023 năm XNUMX

chấm 1
Một yêu cầu?

Tôi đã nỗ lực rất nhiều để viết bài đăng trên blog này nhằm cung cấp giá trị cho bạn. Nó sẽ rất hữu ích cho tôi, nếu bạn cân nhắc chia sẻ nó trên mạng xã hội hoặc với bạn bè/gia đình của bạn. CHIA SẺ LÀ ♥️

suy nghĩ 6 trên “Mmap vs Malloc: Sự khác biệt và so sánh”

  1. Bài viết đưa ra sự so sánh tuyệt vời giữa Mmap và Malloc, nêu bật các chức năng và trường hợp sử dụng độc đáo của chúng. Đó là một nguồn tài nguyên quý giá cho các lập trình viên.

    đáp lại
  2. Đây là một bài viết rất nhiều thông tin. Tôi thấy sự so sánh giữa Mmap và Malloc đặc biệt thú vị. Nó cung cấp sự hiểu biết rõ ràng về cách chúng hoạt động và điều gì làm chúng khác biệt.

    đáp lại
  3. Giải thích rất chi tiết và kỹ lưỡng so sánh hai chức năng. Một nguồn tài nguyên tuyệt vời cho bất kỳ ai đang tìm kiếm thông tin về phân bổ bộ nhớ trong lập trình C.

    đáp lại
  4. Việc so sánh chi tiết rất hữu ích trong việc hiểu các ứng dụng của Mmap và Malloc. Tôi đánh giá cao sự giải thích rõ ràng về chức năng và trường hợp sử dụng của chúng.

    đáp lại

Để lại một bình luận

Bạn muốn lưu bài viết này cho sau này? Nhấp vào trái tim ở góc dưới cùng bên phải để lưu vào hộp bài viết của riêng bạn!