2010-09-04 17 views
6
mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); 

hi ... tôi đang cố gắng tìm hiểu ý nghĩa của mã trên ...?mmap làm gì?

+1

Hoặc 'man 2 mmap'. –

Trả lời

5

man mmap sẽ giúp bạn ở đây.

Nó tạo bản đồ bộ nhớ trong không gian địa chỉ ảo của quy trình. Tạo bản đồ ẩn danh, giống như sử dụng malloc để phân bổ n byte bộ nhớ.

Các thông số là:

  • NULL - hạt nhân sẽ chọn một địa chỉ cho các bản đồ
  • n - chiều dài của bản đồ (theo byte)
  • PROT_WRITE - trang có thể được viết
  • MAP_ANON | MAP_PRIVATE - ánh xạ không được hỗ trợ bởi một tệp và các bản cập nhật được viết cho ánh xạ là riêng tư cho quá trình
  • -1 - bộ mô tả tập tin; không được sử dụng vì các bản đồ không được hỗ trợ bởi một tập tin
  • 0 - bù đắp bên trong file mà tại đó để bắt đầu lập bản đồ - một lần nữa, không được sử dụng, bởi vì các bản đồ không được hỗ trợ bởi một tập tin
6

Nó yêu cầu một ánh xạ ẩn danh riêng tư, có thể ghi của n byte bộ nhớ.

  • Bản đồ riêng tư có nghĩa là nó không được chia sẻ với các quy trình khác (ví dụ: sau fork() trẻ em và cha mẹ sẽ có ánh xạ độc lập);
  • Ánh xạ ẩn danh có nghĩa là nó không được hỗ trợ bởi một tệp.

Trong trường hợp này, nó được về cơ bản yêu cầu một khối n byte của bộ nhớ, vì vậy tương đương với malloc(n) (mặc dù nó phải được trả tự do với munmap() hơn free()). Nó cũng yêu cầu bộ nhớ có thể ghi được nhưng không thể đọc được, nhưng yêu cầu như vậy thường không được phần cứng cơ bản hỗ trợ.

Các vấn đề liên quan