我正在使用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));
我当然可以读写这个地区。我试图通过将指针递增20000来跨越~5页。我的系统的页面大小是4096。我是用sysconf(_SC_PAGESIZE)找到的。我还能读写指针
怎么回事?我是做错了什么,还是有一些我还没有达到的极限?
编辑:为了验证,我希望我的代码失败,超过某个限制,我无法意识到这个限制在哪里
最佳答案
对于小的增量,您只看到一个事实的工件,即虚拟内存是按页面组织的。页面大小是可以分配给进程的最小内存增量。
对于大增量,您可能只是遇到了一个为其他目的分配的页面,例如堆、堆栈或其他文件的映射。