我如何知道我的mmaped分配的界限?

时间:2012-09-22 00:45:16

标签: c memory memory-management malloc mmap

我使用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 %s\n", ((char *)p));

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

怎么回事?我做错了什么或是否有一些我尚未达到的glibc限制?

编辑:要验证,我希望我的代码失败,超越某些限制,我无法实现该限制的位置

1 个答案:

答案 0 :(得分:1)

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

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