In Linux, the mmap(2) man page解釋了一個匿名映射匿名mmap零填充?
。 。 。沒有任何文件支持;其內容被初始化爲零。
The FreeBSD mmap(2) man page沒有做出零填充了類似的保證,儘管它承諾在非匿名的映射文件結束後的字節是零填充。
哪個Unix的口味承諾返回來自匿名mmaps零初始化的內存?哪些在實踐中返回零初始化內存,但在他們的手冊頁上沒有這樣的承諾?
這是我的印象是零填充部分是出於安全考慮。我想知道是否有任何mmap實現會跳過零填充頁面,該頁面被mmap,munmapped,然後再由單個進程再次映射,或者任何實現用僞隨機位或一些非零常量填充新映射的頁面。
P.S. Apparently, even brk and sbrk used to guarantee zero-filled pages.我在Linux上的實驗似乎表明,即使整個頁面都是零填充在後SBRK呼叫分配他們缺頁,部分頁都沒有:
#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]);
}