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/ に書かれている。