gpt4 book ai didi

offset - 为什么 mmap() 中的文件起始偏移量必须是页面大小的倍数

转载 作者:行者123 更新时间:2023-12-01 17:42:04 30 4
gpt4 key购买 nike

在 mmap() 联机帮助页中:

它的原型(prototype)是:

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

和描述:

The mmap() function asks to map 'length' bytes starting at offset 'offset' 
from the file (or other object) specified by the file descriptor fd into
memory, preferably at address 'start'.

具体来说,对于最后一个参数:

'offset' should be a multiple of the page size as returned by getpagesize(2).

根据我的实践,offset 必须是页面大小的倍数,例如,在我的 Linux 上为 4096,否则,mmap() 将返回 Invalid argumentoffset是文件偏移量,为什么它必须是虚拟内存系统页面大小的倍数?

谢谢

最佳答案

简单的答案:让它变得更快。更复杂的答案是:每当您访问映射内存中某个位置的内存时,操作系统必须确保该位置填充了文件的内容。但操作系统只能检测您是否访问内存页面,而不是单个位置。它的作用是,它在文件和内存页面中的偏移量之间创建一个简单的关系 - 每当您访问内存页面时,就会加载文件的该部分。为了使这些计算更快,它限制您从某些偏移量开始。

关于offset - 为什么 mmap() 中的文件起始偏移量必须是页面大小的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20093473/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com