In Linux, the mmap(2) man page giải thích rằng ánh xạ ẩn danhDấu mmap ẩn danh không được điền?
. . . không được hỗ trợ bởi bất kỳ tệp nào; nội dung của nó được khởi tạo bằng không.
The FreeBSD mmap(2) man page không đảm bảo tương tự về số không điền, mặc dù nó hứa hẹn rằng byte sau khi kết thúc tệp trong ánh xạ không ẩn danh không được lấp đầy.
Những hương vị nào của Unix hứa hẹn trả lại bộ nhớ không khởi tạo từ các bản đồ ẩn danh? Mà những người trở lại bộ nhớ zero-initialized trong thực tế, nhưng không hứa hẹn như vậy trên các trang người đàn ông của họ?
Đó là ấn tượng của tôi về việc không điền là một phần vì lý do bảo mật. Tôi tự hỏi có triển khai mmap nào không điền vào một trang đã được mmapped, munmapped, sau đó được mmapped một lần nữa, hoặc nếu bất kỳ triển khai điền vào một trang mới được ánh xạ với bit giả ngẫu nhiên hoặc một số khác không.
P.S. Apparently, even brk and sbrk used to guarantee zero-filled pages. thí nghiệm của tôi trên Linux dường như chỉ ra rằng, ngay cả khi trang đầy đủ là zero-điền khi lỗi trang sau khi một cuộc gọi sbrk phân bổ chúng, các trang một phần không:
#include <unistd.h>
#include <stdio.h>
int main() {
const intptr_t many = 100;
char * start = sbrk(0);
sbrk(many);
for (intptr_t i = 0; i < many; ++i) {
start[i] = 0xff;
}
printf("%d\n",(int)start[many/2]);
sbrk(many/-2);
sbrk(many/2);
printf("%d\n",(int)start[many/2]);
sbrk(-1 * many);
sbrk(many/2);
printf("%d\n",(int)start[0]);
}