2009-11-06 17 views
0

如果你知道有一個,你能告訴我它的用途嗎?如果不是這樣說的話)謝謝。在FreeBSD內核中是否有用於Malloc Call的標誌「M_FAST」?

簽名: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在我的回答如下製成。

回答

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(),必須包括(而不是)和

1

如果文檔沒有提到M_FAST標誌,並且它沒有在平臺的<stdlib.h>標頭中定義,則可以安全地假定它不存在(或者說,如果它確實存在,它不會成爲適合在用戶代碼中使用的穩定API)。

+0

內核的malloc標誌是在FreeBSD下 – PetrosB 2009-11-07 10:15:45

2

FreeBSD內核確實有它自己的執行malloc()具有不同的簽名比標準庫:

當編寫內核代碼(許多系統,而不僅僅是FreeBSD下)通常會有一些限制阻止內核代碼使用標準庫,因此通常會有一個內核庫,它提供了類似的功能,並且具有與標準不同的相似度和差異範圍。

不管你喜歡與否,內核編程都很特別。

但是,我看不到在FreeBSD內核malloc()例程中支持M_FAST標誌的證據。

如果有人存在,也許它表示不應該採取互斥鎖,也許表明調用者確定沒有必要或者更喜歡分配失敗阻塞同步對象 - 我只是在猜測可能是,如果它曾經是。

+0

/sys/malloc.h謝謝你這麼多的清理混亂先生, 你讓我今天很開心 :)。我發佈了關於M_WAIT的澄清。 – 2009-11-07 07:37:13

相關問題