Освободить ранее смапированную область памяти, предоставляя больше контроля в сравнении с munmap()
#include <sys/mman.h>
int munmap_flags( void *addr,
size_t len,
unsigned flags );
- addr
- Адрес начала области памяти.
- len
- Длина ресурса в байтах.
- flags
- Флаги, уточняющие процедуру освобождения памяти:
- 0
- Соответствует поведению функции munmap().
- UNMAP_INT_REQUIRED
- Регламентированное POSIX зануление страниц требуется при следующем аллоцировании физической памяти, ассоциированной с данной областью памяти.
- UNMAP_INT_OPTIONAL
- Зануление физической памяти, ассоциированной с данной областью памяти, при следующем аллоцировании опционально.
- UNMAP_NOCLEAN
- Отключение зануления памяти при выполнении munmap() (см. предупреждение в описании опции -Kz микроядра).
- UNMAP_CLEAN
- Зануление памяти при выполнении munmap() (соответствует действию опции -Kz микроядра, но не распространяется на всю систему).
- UNMAP_DCLEAN
- Двойное зануление памяти при выполнении munmap() (соответствует действию опции -Kz,d микроядра, но не распространяется на всю систему). Флаг недействителен без
UNMAP_CLEAN
.
libc
Функция munmap_flags() удаляет мапирование страниц памяти, начиная с адреса addr и длиной len байт, с округлением вверх до конца страницы памяти. Последующие обращения к этим страницам памяти будут приводить к отправке процессу сигнала SIGSEGV
.
Если соответствующих параметрам запроса страниц памяти не обнаружено, вызов munmap_flags() не будет иметь эффекта.
Имеются некоторые взаимодействия аргумента flags с флагом MAP_NOINIT функции mmap(), равно как и с procnto-*, в следующих аспектах:
- Функция mmap() имеет новый флаг
MAP_NOINIT
. Если флаг установлен, требование POSIX по занулению памяти игнорируется. Физическая память, которая будет использована при мапировании, должна быть предварительно освобождена с использованием UNMAP_INIT_OPTIONAL
для того, чтобы флаг MAP_NOINIT
имел силу.
- procnto-* имеет опцию -m memmgr_configuration. Строчный аргумент memmgr_configuration позволяет настраивать ряд параметров менеджера памяти (в случае, если ему предшествует ~ символ, то речь идет об отключении параметра). Следующие параметры могут быть настроены:
- i
- munmap_flags() (при равенстве нулю flags) действует аналогично
UNMAP_INIT_REQUIRED
(используется по умолчанию). - ~i
- munmap_flags() (при равенстве нулю flags) действует аналогично
UNMAP_INIT_OPTIONAL
.
- 0
- Успешное завершение.
- -1
- Функция завершилась с ошибкой (устанавлено знаение errno).
- EINVAL
- Адрес в пределах заданного диапазона выходит за границы разрешенного диапазона адресного пространства процесса.
- ENOSYS
- Функция munmap_flags() не поддерживается в текущей реализации.
ЗОСРВ «Нейтрино»
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
mmap(), mprotect(), munmap(), shm_open(), shm_unlink()
procnto-*
Предыдущий раздел: Описание API системной библиотеки