日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
MALLOC(9) FreeBSD カーネル開発者マニュアル MALLOC(9) 名称 malloc, free, realloc, reallocf, MALLOC_DEFINE, MALLOC_DECLARE -- カーネ ルメモリ管理ルーチン 書式 #include <sys/types.h> #include <sys/malloc.h> void * malloc(unsigned long size, struct malloc_type *type, int flags); void * mallocarray(size_t nmemb, size_t size, struct malloc_type *type, int flags); void free(void *addr, struct malloc_type *type); void * realloc(void *addr, unsigned long size, struct malloc_type *type, int flags); void * reallocf(void *addr, unsigned long size, struct malloc_type *type, int flags); MALLOC_DECLARE(type); #include <sys/param.h> #include <sys/malloc.h> #include <sys/kernel.h> MALLOC_DEFINE(type, shortdesc, longdesc); 解説 malloc() 関数は、size によって指定されるサイズのオブジェクトのためのカー ネルアドレス空間の初期化されていないメモリを割り付けます。 mallocarray() 関数は、サイズが size によって指定されている nmemb エントリ の配列のためにカーネルアドレス空間の初期化されていないメモリを割り付けま す。 free() 関数は、再利用のために以前に malloc() によって割り付けられたアドレ ス addr でメモリを解放します。メモリは、0 でクリアされません。addr が NULL であるなら、free() は、何もしません。 realloc() 関数は、addr によって参照される以前に割り付けられたメモリのサイ ズを size に変更します。メモリの内容は、新しいサイズと古いサイズのより小 さいもの変更されません。返される値は、addr と異なるかもしれないことに注意 してください。要求されたメモリを割り付けることができないなら、NULL が返さ れ、addr によって参照されるメモリは、有効で、変更されません。addr が NULL であるなら、realloc() 関数は、指定されたサイズに対して malloc() と同一に 振る舞います。 reallocf() 関数は、要求されたメモリを割り付けることができないとき、渡れた ポインタを解放するという点を除いて、realloc() と同一です。 標準 C ライブラリの対応物 (malloc(3)) と異なり、カーネルバージョンは、追 加の 2 つの引数を取ります。flags 引数は、さらに次のような malloc() の操作 上の特性を与えます: M_ZERO 割り付けられたメモリは、すべて 0 に設定されます。 M_NODUMP ページサイズより大きな割り付けに関して、割り付けられたメモリは、 カーネルのコアダンプから除外されます。 M_NOWAIT malloc(), realloc(), と reallocf() は、リソースの不足のために直ち に要求に応じることができないなら、NULL を返します。M_NOWAIT は、 割り込みコンテキストで実行しているとき、要求されることに注意して ください。 M_WAITOK リソースを待つために OK であることを示します。要求を直ちに応じる ことができないなら、現在のプロセスは、他のプロセスによって解放さ れるリソースのためにスリープして待つ状態に置かれます。malloc(), mallocarray(), realloc() と reallocf() 関数は、M_WAITOK が指定さ れるなら、NULL を返すことができません。nmemb と size の乗算が整数 のオーバフローを起こすなら、mallocarray() 関数は、パニックを引き 起こします。 M_USE_RESERVE 要求を満たすためにシステムがメモリのリザーブを使用することができ ることを示します。このオプションは、割り付けがシステムで破滅的な 影響のない呼び出し側によって失敗を許容することができないときの み、M_NOWAIT と組み合わせて使用されるべきです。 正確に M_WAITOK または M_NOWAIT のいずれかの 1 つが、指定されなければなり ません。 type 引数は、メモリ使用法で統計を実行するため、基本的な健全性のチェックの ための使用されます。複数の割り付けを識別するためにそれを使用することがで きます。`vmstat -m' によって統計を調査することができます。 type は、MALLOC_DECLARE() と MALLOC_DEFINE() マクロによって struct malloc_type を使用して、定義されます。 /* sys/something/foo_extern.h */ MALLOC_DECLARE(M_FOOBUF); /* sys/something/foo_main.c */ MALLOC_DEFINE(M_FOOBUF, "foobuffers", "Buffers to foo data into the ether"); /* sys/something/foo_subr.c */ ... buf = malloc(sizeof(*buf), M_FOOBUF, M_NOWAIT); MALLOC_DEFINE() を使用するために、<sys/types.h> の代わりに) <sys/param.h> と <sys/kernel.h> をインクルードしなければなりません。 コンテキスト malloc(), realloc() と reallocf() は、速い割り込みハンドラから呼び出され ません。スレッド化された割り込みから呼び出されるとき、flags は、M_NOWAIT を含んでいなければなりません。 malloc(), realloc() と reallocf() は、M_WAITOK で呼び出されたとき、スリー プします。free() は、決してスリープしません。しかしながら malloc(), realloc(), reallocf() と free() は、重大な (critical) セクション、または spin ロックを保持する間に呼び出されないかもしれません。 vnode(9) インタロックを保持しているとき、(M_NOWAIT でさえ) malloc() また は free() へのあらゆる呼び出しによって、LOR (Lock Order Reversal) は、VM オブジェクトと vnode の結び付けます。 実装に関する注 メモリアロケータは、メモリのページのサイズまでの要求のために 2 のべき冪乗 のサイズがあるチャンクのメモリを割り付けます。より大きな要求について、1 ページ以上が割り付けられます。それは、当てにされるべきではありませんが、 この情報は、メモリ使用の効率を最適化するために役に立ちます。 戻り値 malloc(), realloc() と reallocf() 関数は、オブジェクトのあらゆるタイプの 記憶域のために適切に整列されるカーネルの仮想アドレスを返します、要求が (M_NOWAIT が設定されたことを意味する) 満たすことができなかったなら、NULL を返します。 診断 INVARIANTS 設定オプションを付けてコンパイルされたカーネルは、割り付けられ た領域の外側への書き込み、と malloc() と free() 関数への不均衡な呼び出し のようなものによって生じるメモリの破損の検出を試みます。整合性チェックに 失敗することは、、パニックまたはシステムのコンソールメッセージを引き起こ します。 関連項目 vmstat(8), contigmalloc(9), memguard(9), vnode(9) FreeBSD 11.2 January 10, 2018 FreeBSD 11.2