C++ Mac上的mmap手册页
我的mac电脑上的C++ Mac上的mmap手册页,c++,macos,mmap,virtual-memory,C++,Macos,Mmap,Virtual Memory,我的mac电脑上的mmap手册页显示以下内容 void* memory = mmap(nullptr, range, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0); mmap()系统调用使从addr开始并最多持续len字节的页面从fd描述的对象映射,从byte offset开始 这是否意味着调用可以在没有错误的情况下失败,并返回映射到小于请求的地址范围的部分内存 例如,如果我执行以下操作 void* memory = mmap(nullptr, r
mmap
手册页显示以下内容
void* memory = mmap(nullptr, range, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0);
mmap()系统调用使从addr开始并最多持续len字节的页面从fd描述的对象映射,从byte offset开始
这是否意味着调用可以在没有错误的情况下失败,并返回映射到小于请求的地址范围的部分内存
例如,如果我执行以下操作
void* memory = mmap(nullptr, range, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0);
然后,调用能否成功而不出错,并返回一个不长
range
字节的地址范围?该“地址范围”仍将长range
字节(如果没有正确对齐,则可能更长),但可能无法映射len+offset
可以延伸到映射对象的末尾(例如,文件的末尾)。如果出现这种情况,文档会指出“超出映射对象末尾的任何扩展都将被零填充。”您面临的问题是一个执行许多不同相关操作的系统服务
(假设“偏移量=0”)如果要映射一个65字节的文件,并且指定了“范围=50000”(假设页面大小小于50000),则映射的区域将小于范围,因为文件大小小于范围
因此,虽然通常没有文档记录,但当映射到文件时(在示例中没有这样做),很可能会得到一个虚拟内存分配,该分配的“范围”向下舍入到文件大小,然后向上舍入到页面大小
在您的情况下,如果不映射到文件,则分配可能会向上舍入到最近的页面
同样,我假设您使用的是寻呼系统