Logo vi.removalsclassifieds.com

Sự khác biệt giữa Mmap và Malloc (Với Bảng)

Mục lục:

Anonim

Trong lập trình C, có một bộ nhớ động chỉ vào việc cấp phát 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ố này, được sử dụng để cấp phát bộ nhớ. Sau đó, có mmap. Hệ thống đó được sử dụng như một hệ thống ánh xạ bộ nhớ có đầu vào và đầu ra duy nhất của nó. Hai cái này cung cấp các chức năng giống nhau nhưng khi đào sâu hơn vào chủ đề này, bạn sẽ thấy một số điểm khác biệt.

Mmap vs Malloc

Sự khác biệt giữa mmap và malloc là thời gian thực thi của mmap ít hơn rất nhiều so với malloc. Malloc là giao diện cấp phát bộ nhớ chính trong khi mmap là một hệ thống. Điều đó chịu trách nhiệm cho hạt nhân tìm kiếm các địa chỉ đủ lớn để cho phép ánh xạ nhiều trang.

Mmap trong máy tính là một lệnh gọi hệ thống đa tác vụ POSIX ghi lại tất cả dữ liệu hoặc tệp và thiết bị vào bộ nhớ của nó. Đây còn được gọi là phương pháp nằm trong 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 để phân bổ động một khối dữ liệu khổng lồ, liên quan đến kích thước được chỉ định và khi nó 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 Malloc sử dụng.

Bảng so sánh giữa Mmap và Malloc

Các thông số so sánh

Mmap

Malloc

Sự định nghĩa Mmap được gọi là lệnh 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ăng Mmap 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à lệnh gọi hệ thống. Malloc còn được gọi là giao diện cấp phát bộ nhớ chính.
Các kết quả Mmap không dẫn đến ảnh hưởng đến hiệu suất hệ thống khác. Malloc làm mất tổ chức và tạo ra hiệu suất kém của hệ thống.
Phù hợp nhất cho Mmap phù hợp nhất để tăng tốc quá trình phản hồi của các ứng dụng. 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ớ. Trong quá trình gọi, một ánh xạ mới được tạo trong không gian địa chỉ ảo. 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 trình bổ sung được tìm thấy là NULL, thì địa chỉ được chọn bởi hạt nhân, điều này tạo nên ánh xạ, được coi là phương pháp tạo ánh xạ mới dễ dàng nhất. Nếu địa chỉ không được Tìm thấy dưới dạng NULL, thì hạt nhân coi nó như một dấu hiệu để đặt ánh xạ tại một địa điểm trên Linux.

Kernel 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 vùng, thì 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ả về, 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ì?

Hàm malloc () là một hàm cấp phát bộ nhớ phân bổ kích thước byte và gửi lại một con trỏ đến bộ nhớ được cấp phát. Bộ nhớ không được đặt ở vị trí ban đầu của nó. 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 đến free () thành công.

Không gian bộ nhớ được trỏ bởi ptr, được giải phóng bởi hàm free (), được cho là được gửi lại bởi hàm malloc (). Các hành vi khác, không xác định được cho là xảy ra, nếu trước đó (ptr) miễn phí được gọi. Không có hoạt động nào được thực hiện hoặc được thực hiện nếu ptr được Tìm thấy NULL. Nếu ptr được tìm thấy là NULL, thì giá trị của lệnh gọi bằng malloc (size), với mọi giá trị của size; nếu nó tương đương với 0 và ptr không được tìm thấy là NULL, thì giá trị cuộc gọi bằng free (ptr).

Chỉ khi ptr là NULL, nó đáng lẽ phải được gửi lại bởi một cuộc gọi trước đó tới malloc (). Và khu vực được trỏ đã được thay đổi, một (ptr) miễn phí được thực hiện. Theo mặc định, chiến lược phân bổ bộ nhớ lạc quan được tuân theo bởi Linux, 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ớ sẽ bị mất. Và nếu hệ thống bị thiếu bộ nhớ, một vài tiến 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

Sự kết luận

Tóm lại, mmap là một lệnh gọi hệ thống yêu cầu hạt nhân xác định vị trí vùng trống trong địa chỉ ứng dụng phù hợp với ánh xạ của các trang bộ nhớ khác nhau trong khi malloc là điểm cấp phát bộ nhớ phân bổ khối bộ nhớ có kích thước cụ thể. Bộ nhớ được đặt tại thời gian chạy của nó có nghĩa là cho đến khi chương trình được thực thi, không có dung lượng nào khác có thể được dự trữ.

Ở một số điểm nhất định, mmap có lợi ích hơn so với malloc, bạn không nên chọn trong khi lựa chọn giữa hai điều này để cấp phát bộ nhớ vì mmap chia bộ nhớ và sau đó không thể thực hiện cuộc gọi hệ thống.

Người giới thiệu

Sự khác biệt giữa Mmap và Malloc (Với Bảng)