summaryrefslogtreecommitdiffstats
path: root/man/man3/posix_memalign.3
diff options
context:
space:
mode:
Diffstat (limited to 'man/man3/posix_memalign.3')
-rw-r--r--man/man3/posix_memalign.3276
1 files changed, 276 insertions, 0 deletions
diff --git a/man/man3/posix_memalign.3 b/man/man3/posix_memalign.3
new file mode 100644
index 000000000..534f85932
--- /dev/null
+++ b/man/man3/posix_memalign.3
@@ -0,0 +1,276 @@
+'\" t
+.\" Copyright (c) 2001 by John Levon <moz@compsoc.man.ac.uk>
+.\" Based in part on GNU libc documentation.
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" 2001-10-11, 2003-08-22, aeb, added some details
+.\" 2012-03-23, Michael Kerrisk <mtk.manpages@mail.com>
+.\" Document pvalloc() and aligned_alloc()
+.TH posix_memalign 3 (date) "Linux man-pages (unreleased)"
+.SH NAME
+posix_memalign, aligned_alloc, memalign, valloc, pvalloc \-
+allocate aligned memory
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <stdlib.h>
+.P
+.BI "int posix_memalign(void **" memptr ", size_t " alignment ", size_t " size );
+.BI "void *aligned_alloc(size_t " alignment ", size_t " size );
+.BI "[[deprecated]] void *valloc(size_t " size );
+.P
+.B #include <malloc.h>
+.P
+.BI "[[deprecated]] void *memalign(size_t " alignment ", size_t " size );
+.BI "[[deprecated]] void *pvalloc(size_t " size );
+.fi
+.P
+.RS -4
+Feature Test Macro Requirements for glibc (see
+.BR feature_test_macros (7)):
+.RE
+.P
+.BR posix_memalign ():
+.nf
+ _POSIX_C_SOURCE >= 200112L
+.fi
+.P
+.BR aligned_alloc ():
+.nf
+ _ISOC11_SOURCE
+.fi
+.P
+.BR valloc ():
+.nf
+ 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
+.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
+.fi
+.SH DESCRIPTION
+.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\ *)" .
+This address can later be successfully passed to
+.BR free (3).
+If
+.I size
+is 0, then
+the value placed in
+.I *memptr
+is either NULL
+.\" glibc does this:
+or a unique pointer value.
+.P
+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 alignment ,
+which must be a power of two.
+.\" The behavior of memalign() for size==0 is as for posix_memalign()
+.\" but no standards govern this.
+.P
+.BR aligned_alloc ()
+is the same as
+.BR memalign (),
+except for the added restriction that
+.I alignment
+must be a power of two.
+.P
+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)" .
+.P
+The obsolete function
+.BR pvalloc ()
+is similar to
+.BR valloc (),
+but rounds the size of the allocation up to
+the next multiple of the system page size.
+.P
+For all of these functions, the memory is not zeroed.
+.SH RETURN VALUE
+.BR aligned_alloc (),
+.BR memalign (),
+.BR valloc (),
+and
+.BR pvalloc ()
+return a pointer to the allocated memory on success.
+On error, NULL is returned, and \fIerrno\fP is set
+to indicate the error.
+.P
+.BR posix_memalign ()
+returns zero on success, or one of the error values listed in the
+next section on failure.
+The value of
+.I errno
+is not set.
+On Linux (and other systems),
+.BR posix_memalign ()
+does not modify
+.I memptr
+on failure.
+A requirement standardizing this behavior was added in POSIX.1-2008 TC2.
+.\" http://austingroupbugs.net/view.php?id=520
+.SH ERRORS
+.TP
+.B EINVAL
+The
+.I alignment
+argument was not a power of two, or was not a multiple of
+.IR "sizeof(void\ *)" .
+.TP
+.B ENOMEM
+Out of memory.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbx lb lb
+l l l.
+Interface Attribute Value
+T{
+.na
+.nh
+.BR aligned_alloc (),
+.BR memalign (),
+.BR posix_memalign ()
+T} Thread safety MT-Safe
+T{
+.na
+.nh
+.BR valloc (),
+.BR pvalloc ()
+T} Thread safety MT-Unsafe init
+.TE
+.SH STANDARDS
+.TP
+.BR aligned_alloc ()
+C11.
+.TP
+.BR posix_memalign ()
+POSIX.1-2008.
+.TP
+.BR memalign ()
+.TQ
+.BR valloc ()
+None.
+.TP
+.BR pvalloc ()
+GNU.
+.SH HISTORY
+.TP
+.BR aligned_alloc ()
+glibc 2.16.
+C11.
+.TP
+.BR posix_memalign ()
+glibc 2.1.91.
+POSIX.1d, POSIX.1-2001.
+.TP
+.BR memalign ()
+glibc 2.0.
+SunOS 4.1.3.
+.TP
+.BR valloc ()
+glibc 2.0.
+3.0BSD.
+Documented as obsolete in 4.3BSD,
+and as legacy in SUSv2.
+.TP
+.BR pvalloc ()
+glibc 2.0.
+.\"
+.SS Headers
+Everybody agrees that
+.BR posix_memalign ()
+is declared in \fI<stdlib.h>\fP.
+.P
+On some systems
+.BR memalign ()
+is declared in \fI<stdlib.h>\fP instead of \fI<malloc.h>\fP.
+.P
+According to SUSv2,
+.BR valloc ()
+is declared in \fI<stdlib.h>\fP.
+.\" Libc4,5 and
+glibc declares it in \fI<malloc.h>\fP, and also in
+\fI<stdlib.h>\fP
+if suitable feature test macros are defined (see above).
+.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.
+.P
+.BR posix_memalign ()
+verifies that
+.I alignment
+matches the requirements detailed above.
+.BR memalign ()
+may not check that the
+.I alignment
+argument is correct.
+.P
+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 pass to
+.BR free (3)
+only a pointer obtained 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 functions to be
+reclaimed with
+.BR free (3).
+.P
+The glibc
+.BR malloc (3)
+always returns 8-byte aligned memory addresses, so these functions are
+needed only if you require larger alignment values.
+.SH SEE ALSO
+.BR brk (2),
+.BR getpagesize (2),
+.BR free (3),
+.BR malloc (3)