一个文件被系统调用映射:
mmap(65536, 32768, READ, FLAGS, fd, 0)
页面为 8 KB,因此映射了文件的 4 页(32768/8k = 4 页)。然后进行如下调用:
munmap(65536, 8192)
删除内存映射的指定部分。文件的哪些字节保持映射?答案是第 2 页和第 3 页仍然存在,因此只剩下字节 16384 到 32767;但是,我不确定这是对的。由于 munmap
命令的 len
参数(第二个参数)是 8192 字节,难道不应该只删除第 0 页,留下 8192 到 32767 字节吗?
最佳答案
你和答案都错了,但方式不同。
大多数系统上的内存页是 4 KB(4096 字节),而不是 8 KB。我从未听说过具有 8 KB 内存页的系统。
这使得整个 32768 字节的映射变成了 8 页。取消映射前 8192 个字节(2 页)会将剩余的 6 页(2 到 8)留在原处。
关于linux - 文件的哪些字节保持映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099701/