我正在尝试使用 MAP_ANONYMOUS 标志分配内存块,但它没有与 MAP_SHARED_VALIDATE 标志一起创建任何内存块,而是带有 MAP_PRIVATE 或 MAP_SHARED 标志的 MAP_ANONYMOUS 创建了内存块。有人可以解释为什么会发生这种情况。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
#include <unistd.h>
int main(void)
{
size_t size = getpagesize();
errno = 0;
void *first = mmap(0, size, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_SHARED_VALIDATE, -1, 0);
printf("first: %p %s\n", first, strerror(errno));
errno = 0;
void *second = mmap(0, size, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_SHARED, -1, 0);
printf("second: %p %s\n", second, strerror(errno));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
已经观察到在 Linux 4.19 和 Linux 5.8 上打印,
first: 0xffffffffffffffff Invalid argument
second: 0x7f56b274d000 Success
Run Code Online (Sandbox Code Playgroud)
这些标志 …