Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       brk, sbrk - データセグメントのサイズの変更する

書式

       #include <unistd.h>

       int brk(void *addr);

       void *sbrk(intptr_t increment);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       brk(), sbrk():
           glibc 2.12 以降:
               _BSD_SOURCE || _SVID_SOURCE ||
                   (_XOPEN_SOURCE >= 500 ||
                       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
                   !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
           glibc 2.12 より前: _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
               _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

説明

       brk()  と sbrk()  は プログラムブレーク (program break) の場所を変更する。 プログラムブレークはプロセスの
       データセグメント (data segment) の 末尾を示す (プログラムブレークは、初期化されていない  データセグメント
       の末尾の直後の場所となる)。 プログラムブレークを増やすということは、そのプロセスへの メモリーを割り当てる
       効果があり、 プログラムブレークを減らすということは、メモリーを解放する ということである。

       brk()  は、データセグメントの末尾を  addr  で指定した値に設定する。  設定が行われるのは、指定した値が有効
       で、        システムに十分なメモリーがあり、       プロセスのデータサイズの最大値を超えていない場合である
       (setrlimit(2)  を参照)。

       sbrk()  は、プログラムのデータ空間を increment バイトだけ増やす。 increment を 0 にして sbrk()   を呼び出
       すことで、プログラムの現在のブレーク (break) 場所を知ることができる。

返り値

       成功した場合、 brk()  は 0 を返す。 エラーの場合には、-1 を返し、 errnoENOMEM を設定する。

       成功した場合、  sbrk()   は変更前のプログラムブレークを返す (プログラムブレークが増やされた場合、この値は
       新しく割り当てられたメモリーの先頭を指すポインターとなる)。 エラーの場合には、 (void *) -1 を返し、 errnoENOMEM を設定する。

準拠

       4.3BSD, SUSv1.  SUSv2 では「過去の名残 (LEGACY)」と位置付けられており、 POSIX.1-2001 で削除された。

注意

       brk()   や sbrk()  を使用するのは避けること。 malloc(3)  メモリー割り当てパッケージの方が、移植性が高く、
       使いやすいメモリー割り当て方法を提供している。

       いろいろなシステムにおいて、  sbrk()   の引き数に様々な型が使われている。  一般的なのは   int,   ssize_t,
       ptrdiff_t, intptr_t である。

   C ライブラリとカーネル ABI の違い
       上で説明した  brk()  の返り値についての動作は、 Linux の brk()  システムコールをラップする glibc の関数に
       よるものである。 (その他の多くの実装でも、 brk()  の返り値はこれと同じである。 この返り値は SUSv2  でも規
       定されている。)  しかし、実際の Linux システムコールは、成功した場合、 プログラムの新しいブレークを返す。
       失敗した場合、このシステムコールは現在のブレークを返す。 glibc ラッパー関数は同様の働きをし (すなわち、新
       しいブレークが addr より小さいかどうかをチェックし)、 上で説明した 0 と -1 という返り値を返す。

       Linux  では sbrk()  は brk()  システムコールを使うライブラリ関数として実装されており、 以前のブレークの値
       を返すことができるように内部で調整が行われている。

関連項目

       execve(2), getrlimit(2), end(3), malloc(3)

この文書について

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