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ì?
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ì?
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ếtMAP_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 tin0
- 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 tinNó yêu cầu một ánh xạ ẩn danh riêng tư, có thể ghi của n
byte bộ nhớ.
fork()
trẻ em và cha mẹ sẽ có ánh xạ độc lậ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ợ.
Hoặc 'man 2 mmap'. –