BRK

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

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

索引

ライブラリ

Lb libc  

索引

書式

In sys/types.h In unistd.h Ft int Fn brk const void *addr Ft void * Fn sbrk intptr_t incr  

索引

解説

Bf -symbolic Fn brk 関数と Fn sbrk 関数は、現代的な仮想メモリ管理が現れる以前の、古いインタフェースです。 Ef

Fn brk 関数と Fn sbrk 関数は、プロセスのデータセグメントに割り当てられた メモリ量を変更するために使用されます。 これは、 ``ブレーク'' 位置を移動することで実現します。 ブレークとは、プロセスの初期化されていないデータ ( ``BSS'' としても知られています) の後の最初のアドレスのことです。

Fn brk 関数は、ブレークを Fa addr に設定します。

Fn sbrk 関数は、ブレークを Fa incr バイトだけ増し、結果として少なくとも Fa incr バイトの新規メモリをデータセグメントに割り当てます。 Fa incr が負の場合、ブレークは Fa incr バイトだけ減らされます。  

索引

カーネルが管理する実際のプロセスデータセグメントサイズは ページ単位でのみ増減しますが、 これらの関数は、ブレークを境界にあわない値に設定することを許します (すなわち、データセグメントの最終ページ中の任意のアドレスを指して構いません)。

プログラムのブレークの現在値は、 Fn sbrk 0 を呼び出すことで判定可能です。 end(3) も参照してください。

getrlimit(2) システムコールは、 データ セグメントの許容できる最大のサイズを決定するのに利用できます。 ``etext + rlim.rlim_max '' を越えるブレークを設定することはできません。 rlim.rlim_max は Fn getrlimit RLIMIT_DATA &rlim の呼び出しから返された値です ( etext の定義については end(3) を参照してください)。  

索引

戻り値

Rv -std brk

Fn sbrk 関数は、成功すると古いブレーク値を返します。 失敗すると、値 Po Vt void * Pc Ns -1 が返し、グローバル変数 errno にエラーを表す値を設定します。  

索引

エラー

Fn brk および Fn sbrk 関数は、次の場合に処理に失敗します:

Bq Er EINVAL
要求されたブレーク値がデータセグメントの先頭を越えています。
Bq Er ENOMEM
setrlimit(2) が設定したデータセグメントサイズの限界を越えています。
Bq Er ENOMEM
データセグメントの拡張に必要なスワップ領域内の空間が不充分です。

 

索引

関連項目

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

索引

バグ

Fn brk または Fn sbrk と、 malloc(3), free(3) やこれに類する関数を混在させると、移植性のないプログラム動作となります。

ブレークの設定は、スワップ空間の一時的な不足のために処理が失敗する 可能性があります。 これは getrlimit(2) を使用しないと、データセグメントの最大サイズを越えたことに起因する 失敗と区別することはできません。  

索引

歴史

Fn brk 関数は AT&T System v7 で登場しました。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
バグ
歴史

jman



Time: 07:06:24 GMT, January 12, 2009