在c中映射多个匿名页面
mmaping multiple anonymous pages in c
我在内存中映射了两个匿名页面,然后访问第二个页面如下:
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
标志,但这些都没有帮助。我该怎么做才能完成这项工作?
问题是我将 map
声明为 int*
,因此引用 map[4096]
查找位置 map + 4 * 4096
的值,假设 int
是4 个字节长,这显然超出了我用 mmap
.
保留的范围
我在内存中映射了两个匿名页面,然后访问第二个页面如下:
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
标志,但这些都没有帮助。我该怎么做才能完成这项工作?
问题是我将 map
声明为 int*
,因此引用 map[4096]
查找位置 map + 4 * 4096
的值,假设 int
是4 个字节长,这显然超出了我用 mmap
.