aligned_alloc | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


aligned_alloc関数

概要

アラインメント指定付きで、動的にメモリ領域を確保する

ヘッダ

stdlib.h

形式

void* aligned_alloc(size_t alignment, size_t size);

引数

alignment

要求するアラインメント値。実装がサポートしている大きさでなければならない。

size

確保する領域の大きさを、バイト単位で指定する。この値は、引数 alignment の倍数でなければならない。
0 を指定した場合の動作は処理系定義

戻り値

確保された領域の先頭を指すポインタ。メモリ不足などの要因で失敗した場合には、ヌルポインタが返される。
要求した大きさが 0 の場合は、ヌルポインタが返されるか、何らかの有効なメモリアドレスが返されるかのいずれかである。後者の場合は、そのメモリアドレスを参照してはならない。

詳細

アラインメントを指定できることを除いて、malloc関数と同様。

そもそも、動的メモリ割り当てを行う標準ライブラリ関数は、どんな型にも適合できるように、適切にアラインメントされたメモリアドレスを割り当てている。aligned_alloc関数は、それを超える大きさのアラインメントが必要な場合に使用する。

確保された領域が不要になったら、free関数で解放(システムへ返却)できる。

注意

システムがメモリ領域を管理するための追加の領域が必要なため、実際に割り当てられる大きさは、size を超える可能性がある。

割り当てられた領域の状態は不定である。

使用例

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int* p1 = malloc(sizeof(int) * 256);
    int* p2 = aligned_alloc(256, sizeof(int) * 256);

    printf("%p\n", p1);
    printf("%p\n", p2);

    free(p2);
    free(p1);
}

実行結果:

0x180a010
0x180a500

関連

アラインメント値の明示的な要求が不要なら malloc関数を使えばよい。
解放は free関数で行える。

解説章 第37章


参考リンク


更新履歴

’2018/6/2 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る