other versions
POSIX_MEMALIGN(3) | Linux Programmer's Manual | POSIX_MEMALIGN(3) |
名前¶
posix_memalign, aligned_alloc, memalign, valloc, pvalloc - アラインメント されたメモリの割り当てを行う書式¶
#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);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
- glibc 2.12 以降:
-
_BSD_SOURCE || (_XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
- glibc 2.12 より前:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
説明¶
関数 posix_memalign() は、 size バイトのメモリを割り当て、割り当てられたメモリのアドレスを *memptr に設定する。 割り当てられたメモリのアドレスは alignment の倍数になっているはずである。 alignment は 2 のべき乗で、かつ sizeof(void *) の倍数でなければならない。 size が 0 の場合、 posix_memalign() は NULL か一意なポインタ値を返す。 このポインタ値は、後で free(3) に問題なく渡すことができる。返り値¶
aligned_alloc(), memalign(), valloc(), pvalloc() は割り当てられた メモリへのポインタを返す。 割り当てに失敗した場合は NULL を返す。エラー¶
- EINVAL
- alignment 引き数が 2 のべき乗でなかったか、 sizeof(void *) の倍数でなかった。
- ENOMEM
- 割り当て要求を満たすのに十分なメモリがなかった。
バージョン¶
関数 memalign(), valloc(), pvalloc() は すべての Linux libc ライブラリで使用可能である。準拠¶
関数 valloc() は 3.0BSD で登場した。4.3BSD では廃止されたと記載されており、 SUSv2 では過去の名残だと記載されている。 POSIX.1-2001 には存在しない。ヘッダ¶
posix_memalign() の宣言を <stdlib.h> で行うことに関しては、 皆の意見が一致している。注意¶
多くのシステムでは、アラインメントに関して制限がある。例えば、 ブロックデバイスに対するダイレクト I/O に使用するバッファには アラインメントに関する制限がある。 POSIX では、どんなアラインメントが必要かを知るために pathconf(path,_PC_REC_XFER_ALIGN) コールを規定している。ここで posix_memalign() を使うと、この必要条件を満たすことができる。関連項目¶
brk(2), getpagesize(2), free(3), malloc(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-03-23 | GNU |