C语言 如何知道我的 mmaped 分配的边界



我正在使用mmap创建一个匿名映射,12字节(我知道很小)

p = mmap(NULL,
        12,
        PROT_READ| PROT_WRITE,
        MAP_ANONYMOUS | MAP_PRIVATE,
        -1,
        0);

然后我想验证我是否可以写入超过 12 个字节

p=p+13;
strcpy(p,str);
printf("String at p is %sn", ((char *)p));

果然,我可以读写这个区域。我尝试通过将指针增加 20,000 来跨 ~5 页移动。我的系统上的页面大小是 4096。我使用 sysconf(_SC_PAGESIZE) 发现了这个问题。我仍然可以读取和写入指针

这是怎么回事?我做错了什么,还是有一些我还没有达到的 glibc 限制?

编辑:为了验证,我希望我的代码失败,超过某个限制,我无法意识到该限制在哪里

对于小增量,您只是看到虚拟内存按页面组织的这一事实的工件。页面大小是可以分配给进程的最小内存增量。

对于较大的增量,您可能只是遇到了为其他目的分配的页面,例如堆、堆栈或其他文件的映射。

相关内容

  • 没有找到相关文章