Man page - valloc(3)

Packages contains this manual

Available languages:

en fr ja

Manual

POSIX_MEMALIGN

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
属 性
準 拠
ヘ ッ ダ ー
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

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) 参 照 ):

posix_memalign (): _POSIX_C_SOURCE >= 200112L

aligned_alloc (): _ISOC11_SOURCE

valloc ():

glibc 2.12 以 降 :

(_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200112L)
|| /* glibc 2.19 以 降 : */ _DEFAULT_SOURCE
|| /* glibc 2.19 以 前 : */ _SVID_SOURCE || _BSD_SOURCE

glibc 2.12 よ り 前 :

_BSD_SOURCE || _XOPEN_SOURCE >= 500
((非 標 準 の ) ヘ ッ ダ ー フ ァ イ ル <malloc.h> valloc () の 宣 言 も 公 開 す る 。 機 能 検 査 マ ク ロ は 不 要 で あ る 。

説 明

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 の 倍 数 に な っ て い る は ず で あ る 。 alignment は 2 の べ き 乗 で な け れ ば な ら な い 。

関 数 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 cause of 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.

エ ラ ー

EINVAL

alignment 引 数 が 2 の べ き 乗 で な か っ た か 、 sizeof(void *) の 倍 数 で な か っ た 。

ENOMEM

割 り 当 て 要 求 を 満 た す の に 十 分 な メ モ リ ー が な か っ た 。

バ ー ジ ョ ン

関 数 memalign (), valloc (), pvalloc () は 少 な く と も glibc 2.0 以 降 で 使 用 可 能 で あ る 。

関 数 aligned_alloc () は glibc バ ー ジ ョ ン 2.16 で 追 加 さ れ た 。

関 数 posix_fallocate () は glibc 2.1.91 以 降 で 利 用 可 能 で あ る 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-32774-1.png

準 拠

関 数 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 () は <malloc.h> で は な く <stdlib.h> で 宣 言 さ れ て い る 。

SUSv2 に よ る と 、 valloc () は <stdlib.h> で 宣 言 さ れ る 。 glibc で は <malloc.h> で 宣 言 さ れ て お り 、 さ ら に 適 切 な 機 能 検 査 マ ク ロ が 定 義 さ れ た 場 合 に は <stdlib.h> で も 宣 言 さ れ る (上 記 を 参 照 )。

注 意

多 く の シ ス テ ム で は 、 ア ラ イ ン メ ン ト に 関 し て 制 限 が あ る 。 例 え ば 、 ブ ロ ッ ク デ バ イ ス に 対 す る ダ イ レ ク ト I/O に 使 用 す る バ ッ フ ァ ー に は ア ラ イ ン メ ン ト に 関 す る 制 限 が あ る 。 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 バ イ ト に ア ラ イ ン メ ン ト さ れ た メ モ リ ー ア ド レ ス を 返 す の で 、 こ こ で 述 べ た 関 数 が 必 要 に な る の は 8 バ イ ト よ り も 大 き な ア ラ イ ン メ ン ト が 必 要 な 場 合 だ け で あ る 。

関 連 項 目

brk (2), getpagesize (2), free (3), malloc (3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。