mirror of https://github.com/mkerrisk/man-pages
205 lines
5.2 KiB
Groff
205 lines
5.2 KiB
Groff
.\" (c) 2001 by John Levon <moz@compsoc.man.ac.uk>
|
|
.\" Based in part on GNU libc documentation.
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" 2001-10-11, 2003-08-22, aeb, added some details
|
|
.TH POSIX_MEMALIGN 3 2007-07-26 "GNU" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
posix_memalign, memalign, valloc \- Allocate aligned memory
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <stdlib.h>
|
|
.sp
|
|
.BI "int posix_memalign(void **" memptr ", size_t " alignment ", size_t " size );
|
|
.sp
|
|
.B #include <malloc.h>
|
|
.sp
|
|
.BI "void *valloc(size_t " size );
|
|
.BI "void *memalign(size_t " boundary ", size_t " size );
|
|
.fi
|
|
.sp
|
|
.in -4n
|
|
Feature Test Macro Requirements for glibc (see
|
|
.BR feature_test_macros (7)):
|
|
.in
|
|
.sp
|
|
.ad l
|
|
.BR posix_memalign ():
|
|
_POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600
|
|
.ad b
|
|
.SH DESCRIPTION
|
|
The function
|
|
.BR posix_memalign ()
|
|
allocates
|
|
.I size
|
|
bytes and places the address of the allocated memory in
|
|
.IR "*memptr" .
|
|
The address of the allocated memory will be a multiple of
|
|
.IR "alignment" ,
|
|
which must be a power of two and a multiple of
|
|
.IR "sizeof(void *)".
|
|
|
|
The obsolete function
|
|
.BR memalign ()
|
|
allocates
|
|
.I size
|
|
bytes and returns a pointer to the allocated memory.
|
|
The memory address will be a multiple of
|
|
.IR "boundary" ,
|
|
which must be a power of two.
|
|
|
|
The obsolete function
|
|
.BR valloc ()
|
|
allocates
|
|
.I size
|
|
bytes and returns a pointer to the allocated memory.
|
|
The memory address will be a multiple of the page size.
|
|
It is equivalent to
|
|
.IR "memalign(sysconf(_SC_PAGESIZE),size)" .
|
|
|
|
For all three routines, the memory is not zeroed.
|
|
.SH "RETURN VALUE"
|
|
.BR memalign ()
|
|
and
|
|
.BR valloc ()
|
|
return the pointer to the allocated memory, or NULL if the request fails.
|
|
|
|
.BR posix_memalign ()
|
|
returns zero on success, or one of the error values listed in the
|
|
next section on failure.
|
|
Note that
|
|
.I errno
|
|
is not set.
|
|
.SH "ERRORS"
|
|
.TP
|
|
.B EINVAL
|
|
The
|
|
.I alignment
|
|
parameter was not a power of two, or was not a multiple of
|
|
.IR "sizeof(void *)" .
|
|
.TP
|
|
.B ENOMEM
|
|
There was insufficient memory to fulfill the allocation request.
|
|
.SH VERSIONS
|
|
The functions
|
|
.BR memalign ()
|
|
and
|
|
.BR valloc ()
|
|
have been available in all Linux libc libraries.
|
|
The function
|
|
.BR posix_memalign ()
|
|
is available since glibc 2.1.91.
|
|
.SH "CONFORMING TO"
|
|
The function
|
|
.BR valloc ()
|
|
appeared in 3.0BSD.
|
|
It is documented as being obsolete in 4.3BSD,
|
|
and as legacy in SUSv2.
|
|
It does not appear in POSIX.1-2001.
|
|
The function
|
|
.BR memalign ()
|
|
appears in SunOS 4.1.3 but not in 4.4BSD.
|
|
The function
|
|
.BR posix_memalign ()
|
|
comes from POSIX.1d.
|
|
.SS Headers
|
|
Everybody agrees that
|
|
.BR posix_memalign ()
|
|
is declared in \fI<stdlib.h>\fP.
|
|
|
|
On some systems
|
|
.BR memalign ()
|
|
is declared in \fI<stdlib.h>\fP instead of \fI<malloc.h>\fP.
|
|
|
|
According to SUSv2,
|
|
.BR valloc ()
|
|
is declared in \fI<stdlib.h>\fP.
|
|
Libc4,5 and glibc declare it in \fI<malloc.h>\fP and perhaps also in
|
|
\fI<stdlib.h>\fP
|
|
(namely, if
|
|
.B _GNU_SOURCE
|
|
is defined, or
|
|
.B _BSD_SOURCE
|
|
is defined, or,
|
|
for glibc, if
|
|
.B _XOPEN_SOURCE_EXTENDED
|
|
is defined, or, equivalently,
|
|
.B _XOPEN_SOURCE
|
|
is defined to a value not less than 500).
|
|
.SH NOTES
|
|
On many systems there are alignment restrictions, for example, on buffers
|
|
used for direct block device I/O.
|
|
POSIX specifies the
|
|
.I "pathconf(path,_PC_REC_XFER_ALIGN)"
|
|
call that tells what alignment is needed.
|
|
Now one can use
|
|
.BR posix_memalign ()
|
|
to satisfy this requirement.
|
|
|
|
.BR posix_memalign ()
|
|
verifies that
|
|
.I alignment
|
|
matches the requirements detailed above.
|
|
.BR memalign ()
|
|
may not check that the
|
|
.I boundary
|
|
parameter is correct.
|
|
|
|
POSIX requires that memory obtained from
|
|
.BR posix_memalign ()
|
|
can be freed using
|
|
.BR free (3).
|
|
Some systems provide no way to reclaim memory allocated with
|
|
.BR memalign ()
|
|
or
|
|
.BR valloc ()
|
|
(because one can only pass to
|
|
.BR free (3)
|
|
a pointer gotten from
|
|
.BR malloc (3),
|
|
while, for example,
|
|
.BR memalign ()
|
|
would call
|
|
.BR malloc (3)
|
|
and then align the obtained value).
|
|
.\" Other systems allow passing the result of
|
|
.\" .IR valloc ()
|
|
.\" to
|
|
.\" .IR free (3),
|
|
.\" but not to
|
|
.\" .IR realloc (3).
|
|
The glibc implementation
|
|
allows memory obtained from any of these three routines to be
|
|
reclaimed with
|
|
.BR free (3).
|
|
|
|
The glibc
|
|
.BR malloc (3)
|
|
always returns 8-byte aligned memory addresses, so these routines are only
|
|
needed if you require larger alignment values.
|
|
.SH "SEE ALSO"
|
|
.BR brk (2),
|
|
.BR getpagesize (2),
|
|
.BR free (3),
|
|
.BR malloc (3)
|