munmap()

Освободить ранее выделенную область памяти

Прототип:

#include <sys/mman.h>
int munmap( void *addr,
size_t len );

Аргументы:

addr
Адрес начала области памяти.
len
Размер области памяти в байтах.

Библиотека:

libc

Описание:

Функция munmap() освобождает ранее выделенные страницы памяти, начиная с адреса addr и размером len байт, с округлением вверх до размера страницы памяти. Последующие обращения к этим страницам памяти будут приводить к отправке процессу сигнала SIGSEGV.

Если для указанного в параметрах адреса нет выделенных страниц памяти, вызов munmap() не будет иметь эффекта.

Возвращаемое значение:

0
Успешное завершение.
-1
Функция завершилась с ошибкой (устанавливается код errno).

Коды ошибок:

EINVAL
Адрес заданного диапазона выходит за границы адресного пространства, разрешенного для процесса.
ENOMEM
Менеджер памяти не смог зарезервировать нужное количество памяти, требуемой для обработки запроса munmap(). Эта память требуется для хранения внутренних структур, характеризующих новое состояние адресного пространства процесса.
ENOSYS
Функция munmap() не поддерживается.

Классификация:

POSIX 1003.1 Memory Mapped Files, Shared Memory Objects, Typed Memory Objects

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

В настоящий момент нельзя использовать munmap() для освобождения только отдельных фрагментов памяти, выделенной ранее функцией mmap().

Тематические ссылки:

mmap(), mprotect(), munmap_flags(), shm_open(), shm_unlink()




Предыдущий раздел: Описание API системной библиотеки