- 论坛徽章:
- 0
|
第一次调用的代码
/*
* Reserve needed memory area to avoid a race.
* It should be discarded using:
* - mmap() with MAP_FIXED flag
* - mremap() with MREMAP_FIXED flag
* - shmat() with SHM_REMAP flag
*/
ptr = mmap((void *)(unsigned long)addr, size, PROT_NONE,
MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0);
第二次
p = mmap(g2h(mmap_start),
host_len, prot, flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
参数不一样是因为在不同的函数里.
strace的显示:
mmap2(0x40000000, 528384, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x40000000
mmap2(0x40000000, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40000000
这两次之间没有进行munmap.
前面的注释看不懂,不理解这个为什么要这样做两次, discard何必呢? |
|