brkのヘルプ・マニュアル
日本語 英語
brk --help
man brk
BRK(2) Linux Programmer’s Manual BRK(2)
名前
brk, sbrk - データ・セグメントのサイズの変更する
書式
#include
int brk(void *addr);
void *sbrk(intptr_t increment);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
brk(), sbrk(): _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
説明
brk() と sbrk() は プログラム・ブレーク (program break) の場所を変更す
る。プログラム・ブレークはプロセスのデータ・セグメント (data segment)
の 末尾を示す (プログラム・ブレークは、初期化されていないデータ・セグメ
ントの末尾の直後の場所となる)。プログラム・ブレークを増やすということは
、 そのプロセスへのメモリを割り当てる効果があり、プログラム・ブレークを
減らすということは、メモリを解放するということである。
brk() は、データ・セグメントの末尾を addr で指定した値に設定する。設 定
が 行われるのは、指定した値が有効で、システムに十分なメモリがあり、プロ
セスのデータサイズの最大値を超えていない場合である (setrlimit(2) を 参
照)。
sbrk() は、プログラムのデータ空間を increment バイトだけ増やす。 incre-
ment を 0 にして sbrk() を呼び出すことで、プログラムの現在のブ レ ー ク
(break) 場所を知ることができる。
返り値
成 功 した場合、 brk() は 0 を返す。エラーの場合には、-1 を返し、 errno
に ENOMEM を設定する (ただし「LINUX での注意」を参照すること)。
成功した場合、 sbrk() は変更前のプログラム・ブレークを返す (プログラ ム
・ ブレークが増やされた場合、この値は新しく割り当てられたメモリの先頭を
指すポインタとなる)。エラーの場合には、 (void *) -1 を返し、 errno に
ENOMEM を設定する。
準拠
4.3BSD, SUSv1. SUSv2 では「過去の名残 (LEGACY)」と位置付けられており、
POSIX.1-2001 で削除された。
注意
brk() や sbrk() を使用するのは避けること。 malloc(3) メモリ割り当てパッ
ケ ージの方が、移植性が高く、使いやすいメモリ割り当て方法を提供している
。
いろいろなシステムにおいて、 sbrk() の引き数に様々な型が使われている 。
一般的なのは int, ssize_t, ptrdiff_t, intptr_t である。
Linux での注意
上で説明した brk() の返り値についての動作は、 Linux の brk() システムコ
ールをラップする glibc の関数によるものである。 (その他の多くの実装でも
、 brk() の返り値はこれと同じである。この返り値は SUSv2 でも規定されて
いる。) しかし、実際の Linux システムコールは、成功した場合、プログラム
の 新しいブレークを返す。失敗した場合、このシステムコールは現在のブレー
クを返す。 glibc ラッパー関数は同様の働きをし (すなわち、新しいブレーク
が addr より小さいかどうかをチェックし)、上で説明した 0 と -1 という返
り値を返す。
Linux では sbrk() は brk() システムコールを使うライブラリ関数として実装
さ れており、以前のブレークの値を返すことができるように内部で調整が行わ
れている。
関連項目
execve(2), getrlimit(2), end(3), malloc(3)
Linux 2008-06-18 BRK(2)
BRK(2) Linux Programmer’s Manual BRK(2)
NAME
brk, sbrk - change data segment size
SYNOPSIS
#include
int brk(void *addr);
void *sbrk(intptr_t increment);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
brk(), sbrk(): _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
DESCRIPTION
brk() and sbrk() change the location of the program break, which
defines the end of the process’s data segment (i.e., the program break
is the first location after the end of the uninitialized data segment).
Increasing the program break has the effect of allocating memory to the
process; decreasing the break deallocates memory.
brk() sets the end of the data segment to the value specified by addr,
when that value is reasonable, the system has enough memory, and the
process does not exceed its maximum data size (see setrlimit(2)).
sbrk() increments the program’s data space by increment bytes. Calling
sbrk() with an increment of 0 can be used to find the current location
of the program break.
RETURN VALUE
On success, brk() returns zero. On error, -1 is returned, and errno is
set to ENOMEM. (But see Linux Notes below.)
On success, sbrk() returns the previous program break. (If the break
was increased, then this value is a pointer to the start of the newly
allocated memory). On error, (void *) -1 is returned, and errno is set
to ENOMEM.
CONFORMING TO
4.3BSD; SUSv1, marked LEGACY in SUSv2, removed in POSIX.1-2001.
NOTES
Avoid using brk() and sbrk(): the malloc(3) memory allocation package
is the portable and comfortable way of allocating memory.
Various systems use various types for the argument of sbrk(). Common
are int, ssize_t, ptrdiff_t, intptr_t.
Linux Notes
The return value described above for brk() is the behavior provided by
the glibc wrapper function for the Linux brk() system call. (On most
other implementations, the return value from brk() is the same; this
return value was also specified in SUSv2.) However, the actual Linux
system call returns the new program break on success. On failure, the
system call returns the current break. The glibc wrapper function does
some work (i.e., checks whether the new break is less than addr) to
provide the 0 and -1 return values described above.
On Linux, sbrk() is implemented as a library function that uses the
brk() system call, and does some internal bookkeeping so that it can
return the old break value.
SEE ALSO
execve(2), getrlimit(2), end(3), malloc(3)
COLOPHON
This page is part of release 3.22 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
Linux 2008-06-18 BRK(2)