Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Mac上的mmap手册页_C++_Macos_Mmap_Virtual Memory - Fatal编程技术网

C++ Mac上的mmap手册页

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

我的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, range, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0);

然后,调用能否成功而不出错,并返回一个不长
range
字节的地址范围?

该“地址范围”仍将长
range
字节(如果没有正确对齐,则可能更长),但可能无法映射
len+offset
可以延伸到映射对象的末尾(例如,文件的末尾)。如果出现这种情况,文档会指出“超出映射对象末尾的任何扩展都将被零填充。”

您面临的问题是一个执行许多不同相关操作的系统服务

(假设“偏移量=0”)如果要映射一个65字节的文件,并且指定了“范围=50000”(假设页面大小小于50000),则映射的区域将小于范围,因为文件大小小于范围

因此,虽然通常没有文档记录,但当映射到文件时(在示例中没有这样做),很可能会得到一个虚拟内存分配,该分配的“范围”向下舍入到文件大小,然后向上舍入到页面大小

在您的情况下,如果不映射到文件,则分配可能会向上舍入到最近的页面

同样,我假设您使用的是寻呼系统