table of contents
- bookworm-backports 4.24.0-2~bpo12+1
posix_memalign(3) | Library Functions Manual | posix_memalign(3) |
ИМЯ¶
posix_memalign, aligned_alloc, memalign, valloc, pvalloc - выделяет выровненную область памяти
БИБЛИОТЕКА¶
Стандартная библиотека языка C (libc, -lc)
СИНТАКСИС¶
#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size); void *aligned_alloc(size_t alignment, size_t size); void *valloc(size_t size);
#include <malloc.h>
void *memalign(size_t alignment, size_t size); void *pvalloc(size_t size);
posix_memalign():
_POSIX_C_SOURCE >= 200112L
aligned_alloc():
_ISOC11_SOURCE
valloc():
Since glibc 2.12:
(_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200112L)
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
Before glibc 2.12:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
ОПИСАНИЕ¶
The function posix_memalign() allocates size bytes and places the address of the allocated memory in *memptr. The address of the allocated memory will be a multiple of alignment, which must be a power of two and a multiple of sizeof(void *). This address can later be successfully passed to free(3). If size is 0, then the value placed in *memptr is either NULL or a unique pointer value.
Устаревшая функция memalign() выделяет size байт и возвращает указатель на выделенную память. Адрес памяти будет кратен значению alignment, которое должны быть степенью двойки.
Функция aligned_alloc() подобна memalign(), но добавляет ограничение для значения size, которое должно быть кратно alignment.
Устаревшая функция valloc() выделяет size байт и возвращает указатель на выделенную память. Адрес памяти будет кратен размеру страницы. Она эквивалентна вызову memalign(sysconf(_SC_PAGESIZE),size).
Устаревшая функция pvalloc() подобна valloc(), но округляет выделяемый размер до следующего кратного значения системной страницы.
Эти функции не обнуляют выделяемую память.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
aligned_alloc(), memalign(), valloc(), and pvalloc() return a pointer to the allocated memory on success. On error, NULL is returned, and errno is set to indicate the error.
posix_memalign() returns zero on success, or one of the error values listed in the next section on failure. The value of errno is not set. On Linux (and other systems), posix_memalign() does not modify memptr on failure. A requirement standardizing this behavior was added in POSIX.1-2008 TC2.
ОШИБКИ¶
ВЕРСИИ¶
The functions memalign(), valloc(), and pvalloc() have been available since at least glibc 2.0.
The function aligned_alloc() was added in glibc 2.16.
Функция posix_memalign() доступна в glibc начиная с версии 2.1.91.
АТРИБУТЫ¶
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
aligned_alloc(), memalign(), posix_memalign() | Безвредность в нитях | MT-Safe |
valloc(), pvalloc() | Безвредность в нитях | MT-Unsafe init |
СТАНДАРТЫ¶
Функция valloc() появилась из 3.0BSD. Она описана как устаревшая в 4.3BSD и в SUSv2. Отсутствует в POSIX.1.
Функция pvalloc() является расширением GNU.
Функция memalign() появилась из SunOS 4.1.3, но отсутствует в 4.4BSD.
Функция posix_memalign() появилась из POSIX.1d и описана в POSIX.1-2001 и POSIX.1-2008.
Функция aligned_alloc() описана в стандарте C11.
Заголовки¶
Функция posix_memalign() везде объявлена в <stdlib.h>.
В некоторых системах memalign() объявлена в <stdlib.h>, а не в <malloc.h>.
According to SUSv2, valloc() is declared in <stdlib.h>. glibc declares it in <malloc.h>, and also in <stdlib.h> if suitable feature test macros are defined (see above).
ПРИМЕЧАНИЯ¶
Во многих системах накладываются ограничения по выравниванию, например, на буферы, используемые для прямого ввода-вывода в блочные устройства. В POSIX определён вызов pathconf(path,_PC_REC_XFER_ALIGN), показывающий необходимость выравнивания. В настоящее время можно использовать posix_memalign() для удовлетворения этого требования.
Функция posix_memalign() проверяет, что alignment удовлетворяет требованиям, описанным выше. Функция memalign() может не проверять корректность аргумента alignment.
В POSIX требуется, чтобы память, полученная через posix_memalign(), могла освобождаться с помощью free(3). В некоторых системах отсутствует механизм освобождения памяти, выделенной memalign() или valloc() (так как в них во free(3) передаётся только указатель, полученный из malloc(3), но, например, memalign() выполняет вызов malloc(3) и затем выравнивает полученное значение). Реализация glibc позволяет освобождать память, полученную через эти функции, с помощью free(3).
Функция glibc malloc(3) всегда возвращает адреса памяти, выровненные по 8-байтовой границе, поэтому данные функции требуются только, если нужны значения с большим выравниванием.
СМОТРИТЕ ТАКЖЕ¶
ПЕРЕВОД¶
Русский перевод этой страницы руководства разработал(и) Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Darima Kogan <silverdk99@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
5 февраля 2023 г. | Справочные страницы Linux 6.03 |