posix_memalign()

Выделить выровненный участок памяти

Прототип:

#include <stdlib.h>
int posix_memalign( void **memptr,
size_t alignment,
size_t size );

Аргументы:

memptr
Указатель на место, где posix_memalign() может хранить указатель на участок памяти.
alignment
Выравнивание памяти. Оно должно быть кратно size( void* ), а также являться степенью 2.
size
Размер выделяемого блока в байтах.

Библиотека:

libc

Описание:

Функция posix_memalign() выделяет size байт, выровненных согласно значению заданного параметром alignment. После чего функция возвращает указатель на выделенную память memptr.

Буфер, выделенный функцией posix_memalign(), непрерывен в виртуальном адресном пространстве, но не в физической памяти. Поскольку некоторые платформы не имеют возможности выделения памяти блоками размером 4 КБ, не следует предполагать, что выделенная память будет физически непрерывной, если указан размер 4 КБ или меньше.

Можно получить физический адрес начала буфера, используя mem_offset() с fd=NOFD.

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

0
Успешное завершение.
-1
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EINVAL
Значение alignment не кратно size( void* ), а также не является степенью 2.
ENOMEM
Недостаточно памяти для запрошенного выравнивания.

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

POSIX 1003.1 Advisory Information

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

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

errno, free(), malloc(), memalign()




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