在c中mmaping多个匿名页面

时间:2015-11-09 23:56:08

标签: c mmap sigsegv

我在内存中映射了两个匿名页面,然后访问第二页,如下所示:

    int* map = mmap(NULL, 8 * 1024, PROT_READ, PROT_WRITE, MAP_SHARED |
                    MAP_ANONYMOUS, -1, 0);
    int a = map[4096];

页面大小为4096(我验证了这一点),但这会抛出SIGSEGV。我尝试使用madvise(map, 8 * 1024, MADV_WILLNEED)并在mmap中使用MAP_POPULATE标记,但这些没有帮助。我能做些什么才能做到这一点?

1 个答案:

答案 0 :(得分:1)

问题是我将map声明为int*,因此引用map[4096]会查找位置map + 4 * 4096的值,假设int是4个字节很长,这显然超出了我用mmap保留的范围。