Ответ 1
Можно map
, скажем, 5 страниц, а затем unmap
один из них. И информация о том, какие страницы для unmap передаются как адрес и длина, где длина кратна размеру страницы.
Мне было интересно, почему размер передаваемой памяти является одним параметром, так как не может быть больше одного сопоставления, начинающегося с того же адреса (могут ли они?), почему ядро Linux не запустит как начальный адрес, длина вместе, но пусть программа userspace запоминает их.
Я имею в виду, почему бы и нет, просто используйте начальный адрес в качестве первичного ключа для хранения информационного дерева.
Можно map
, скажем, 5 страниц, а затем unmap
один из них. И информация о том, какие страницы для unmap передаются как адрес и длина, где длина кратна размеру страницы.
Вы можете munmap
поддиапазон адресов памяти, которые вы предварительно сопоставили. Например:
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
int main()
{
int pagesize = sysconf(_SC_PAGESIZE);
char *addr = mmap(NULL, 4 * pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
addr[pagesize] = 'X';
munmap(addr, pagesize);
printf("%c\n", addr[pagesize]);
}