0

あることをご存知でしたら、その目的を教えていただけますか? そうでない場合は、そう言ってください:)ありがとう。

Signature : void * malloc(unsigned long size, struct malloc_type type, int flags);

例えば。他のフラグは...

 M_ZERO  
         Causes the allocated memory to be set to all zeros.

 M_WAITOK
         Indicates that it is OK to wait for resources.  If the request
         cannot be immediately fulfilled, the current process is put to
         sleep to wait for resources to be released by other processes.
         The malloc(), realloc(), and reallocf() functions cannot return
         NULL if M_WAITOK is specified.**

これが私の混乱の根源です

編集

M_FAST の説明は、以下の私の回答で行われます。

4

3 に答える 3

2

malloc()FreeBSDカーネルには、標準ライブラリとは異なる署名を持つ独自の実装があります。

カーネルコードを書くとき(FreeBSDだけでなく多くのシステムで)、カーネルコードが標準ライブラリを使用することを妨げる制約があることがよくあります。そのため、通常、標準との類似点と相違点の範囲が異なる同様の機能を提供するカーネルライブラリがあります。

好むと好まざるとにかかわらず、カーネルプログラミングは特別です。

しかし、FreeBSDカーネルルーチンM_FASTでフラグがサポートされているという証拠は見当たりません。malloc()

存在した場合は、ミューテックスを使用すべきではないことを示している可能性があります。おそらく、呼び出し元が必要がないことを確信していること、または同期オブジェクトのブロックよりも割り当ての失敗を好んでいることを示しています。もしそうなら。

于 2009-11-06T05:41:33.973 に答える
1

ドキュメントに M_FAST フラグが記載されておらず<stdlib.h>、プラットフォームのヘッダーで定義されていない場合は、それが存在しないと安全に想定できます (または、存在する場合、適切な安定した API ではないと見なすことができます)。ユーザーコードで使用するため)。

于 2009-11-06T03:33:27.743 に答える
0

以下の M_FAST はフラグではありません。私が投稿した質問には常に答えがありました:P

これは、メモリ割り当てに関する統計を実行するために使用される malloc_type 型の引数です。詳細については、以下の FreeBSD のドキュメントを参照してください (ここで、M_FOOBUF = M_FAST)。

type 引数は、メモリ使用量の統計を実行するために使用され、基本的な健全性チェックに使用されます。複数の割り当てを識別するために使用できます。統計は、「vmstat -m」で調べることができます。

型は、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 in to the ether");

/* sys/something/foo_subr.c */   
buf = malloc(sizeof *buf, M_FOOBUF, M_NOWAIT);

MALLOC_DEFINE() を使用するには、(の代わりに) と

于 2009-11-07T07:33:17.830 に答える