.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2001 by John Levon .\" Based in part on GNU libc documentation. .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" 2001-10-11, 2003-08-22, aeb, added some details .\" 2012-03-23, Michael Kerrisk .\" Document pvalloc() and aligned_alloc() .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH POSIX_MEMALIGN 3 "21 декабря 2020 г." GNU "Руководство программиста Linux" .SH ИМЯ posix_memalign, aligned_alloc, memalign, valloc, pvalloc \- выделяет выровненную область памяти .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint posix_memalign(void **\fP\fImemptr\fP\fB, size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB);\fP \fBvoid *aligned_alloc(size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB);\fP \fBvoid *valloc(size_t \fP\fIsize\fP\fB);\fP \fB#include \fP .PP \fBvoid *memalign(size_t \fP\fIalignment\fP\fB, size_t \fP\fIsize\fP\fB);\fP \fBvoid *pvalloc(size_t \fP\fIsize\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP .ad l \fBposix_memalign\fP(): _POSIX_C_SOURCE\ >=\ 200112L .PP \fBaligned_alloc\fP(): _ISOC11_SOURCE .PP \fBvalloc\fP(): .br .PD 0 .RS 4 .TP 4 Начиная с glibc 2.12: .nf (_XOPEN_SOURCE\ >=\ 500) && !(_POSIX_C_SOURCE\ >=\ 200112L) || /* начиная с glibc 2.19: */ _DEFAULT_SOURCE || /* в версии glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE .br .fi .TP До glibc 2.12: .\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 .ad b .br (Заголовочный файл \fI\fP (нестандартный) также содержит объявление \fBvalloc\fP(); макросов тестирования свойств не требуется) .RE .PD .SH ОПИСАНИЕ .\" glibc does this: The function \fBposix_memalign\fP() allocates \fIsize\fP bytes and places the address of the allocated memory in \fI*memptr\fP. The address of the allocated memory will be a multiple of \fIalignment\fP, which must be a power of two and a multiple of \fIsizeof(void\ *)\fP. This address can later be successfully passed to \fBfree\fP(3). If \fIsize\fP is 0, then the value placed in \fI*memptr\fP is either NULL or a unique pointer value. .PP .\" The behavior of memalign() for size==0 is as for posix_memalign() .\" but no standards govern this. Устаревшая функция \fBmemalign\fP() выделяет \fIsize\fP байт и возвращает указатель на выделенную память. Адрес памяти будет кратен значению \fIalignment\fP, которое должны быть степенью двойки. .PP Функция \fBaligned_alloc\fP() подобна \fBmemalign\fP(), но добавляет ограничение для значения \fIsize\fP, которое должно быть кратно \fIalignment\fP. .PP Устаревшая функция \fBvalloc\fP() выделяет \fIsize\fP байт и возвращает указатель на выделенную память. Адрес памяти будет кратен размеру страницы. Она эквивалентна вызову \fImemalign(sysconf(_SC_PAGESIZE),size)\fP. .PP Устаревшая функция \fBpvalloc\fP() подобна \fBvalloc\fP(), но округляет выделяемый размер до следующего кратного значения системной страницы. .PP Эти функции не обнуляют выделяемую память. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функции \fBaligned_alloc\fP(), \fBmemalign\fP(), \fBvalloc\fP() и \fBpvalloc\fP() при успешном выполнении возвращают указатель на выделенную память. При ошибке возвращается NULL, а \fIerrno\fP присваивается номер ошибки. .PP .\" http://austingroupbugs.net/view.php?id=520 \fBposix_memalign\fP() returns zero on success, or one of the error values listed in the next section on failure. The value of \fIerrno\fP is not set. On Linux (and other systems), \fBposix_memalign\fP() does not modify \fImemptr\fP on failure. A requirement standardizing this behavior was added in POSIX.1\-2008 TC2. .SH ОШИБКИ .TP \fBEINVAL\fP Аргумент \fIalignment\fP не является степенью двойки или не кратен \fIsizeof(void\ *)\fP. .TP \fBENOMEM\fP Недостаточно памяти для выполнения запроса о выделении. .SH ВЕРСИИ The functions \fBmemalign\fP(), \fBvalloc\fP(), and \fBpvalloc\fP() have been available since at least glibc 2.0. .PP Функция \fBaligned_alloc\fP() впервые появилась в glibc 2.16. .PP Функция \fBposix_memalign\fP() доступна в glibc начиная с версии 2.1.91. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lb lb lb l l l. Интерфейс Атрибут Значение T{ \fBaligned_alloc\fP(), .br \fBmemalign\fP(), .br \fBposix_memalign\fP() T} Безвредность в нитях MT\-Safe T{ \fBvalloc\fP(), .br \fBpvalloc\fP() T} Безвредность в нитях MT\-Unsafe init .TE .sp 1 .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" Функция \fBvalloc\fP() появилась из 3.0BSD. Она описана как устаревшая\ в 4.3BSD и в SUSv2. Отсутствует в POSIX.1. .PP Функция \fBpvalloc\fP() является расширением GNU. .PP Функция \fBmemalign\fP() появилась из SunOS 4.1.3, но отсутствует в 4.4BSD. .PP Функция \fBposix_memalign\fP() появилась из POSIX.1d и описана в POSIX.1\-2001 и POSIX.1\-2008. .PP .\" Функция \fBaligned_alloc\fP() описана в стандарте C11. .SS Заголовки Функция \fBposix_memalign\fP() везде объявлена в \fI\fP. .PP В некоторых системах \fBmemalign\fP() объявлена в \fI\fP, а не в \fI\fP. .PP .\" Libc4,5 and According to SUSv2, \fBvalloc\fP() is declared in \fI\fP. Glibc declares it in \fI\fP, and also in \fI\fP if suitable feature test macros are defined (see above). .SH ЗАМЕЧАНИЯ Во многих системах накладываются ограничения по выравниванию, например, на буферы, используемые для прямого ввода\-вывода в блочные устройства. В POSIX определён вызов \fIpathconf(path,_PC_REC_XFER_ALIGN)\fP, показывающий необходимость выравнивания. В настоящее время можно использовать \fBposix_memalign\fP() для удовлетворения этого требования. .PP Функция \fBposix_memalign\fP() проверяет, что \fIalignment\fP удовлетворяет требованиям, описанным выше. Функция \fBmemalign\fP() может не проверять корректность аргумента \fIalignment\fP. .PP .\" Other systems allow passing the result of .\" .IR valloc () .\" to .\" .IR free (3), .\" but not to .\" .IR realloc (3). В POSIX требуется, чтобы память, полученная через \fBposix_memalign\fP(), могла освобождаться с помощью \fBfree\fP(3). В некоторых системах отсутствует механизм освобождения памяти, выделенной \fBmemalign\fP() или \fBvalloc\fP() (так как в них во \fBfree\fP(3) передаётся только указатель, полученный из \fBmalloc\fP(3), но, например, \fBmemalign\fP() выполняет вызов \fBmalloc\fP(3) и затем выравнивает полученное значение). Реализация glibc позволяет освобождать память, полученную через эти функции, с помощью \fBfree\fP(3). .PP Функция glibc \fBmalloc\fP(3) всегда возвращает адреса памяти, выровненные по 8\-байтовой границе, поэтому данные функции требуются только, если нужны значения с большим выравниванием. .SH "СМ. ТАКЖЕ" \fBbrk\fP(2), \fBgetpagesize\fP(2), \fBfree\fP(3), \fBmalloc\fP(3) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov , kogamatranslator49 , Kogan, Max Is , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .