在FreeBSD内核中是否有用于Malloc Call的标志“M_FAST”?

时间:2009-11-06 01:25:20

标签: c++ c malloc freebsd

如果你知道有一个,你能告诉我它的用途吗?如果不是,请说出来:)谢谢。

签名: 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的澄清在我的答案中作出。

3 个答案:

答案 0 :(得分:2)

FreeBSD内核确实有自己的malloc()实现,它的签名与标准库的签名不同:

在编写内核代码时(对于许多系统,不仅仅是FreeBSD),通常存在阻止内核代码使用标准库的约束,因此通常会有一个内核库提供类似的功能,其中包含与标准不同的相似性和差异性

无论喜欢与否,内核编程都很特别。

但是,我没有看到在FreeBSD内核M_FAST例程中支持malloc()标志的证据。

如果有一个确实存在,也许它表示不应该使用互斥锁,可能表明调用者确定没有必要,或者更喜欢分配失败阻塞同步对象 - 我只是在猜测可能是什么如果有的话,一直都是。

答案 1 :(得分:1)

如果文档未提及M_FAST标志,并且未在平台上的<stdlib.h>标头中定义,则可以安全地假设它不存在(或者更确切地说,如果它不存在,不适合在用户代码中使用的稳定API。

答案 2 :(得分:0)

M_FAST不是下面的标志。答案始终存在于我发布的问题中:P

它是一个malloc_type类型参数,用于执行内存分配的统计信息。 有关更多信息,请参阅下面的FreeBSD文档, (其中,M_FOOBUF = M_FAST)

type参数用于执行内存使用情况统计和基本健全性检查。它可用于识别多个分配。可以通过`vmstat -m'检查统计数据。

使用struct malloc_type通过MALLOC_DECLARE()和MALLOC_DEFINE()宏定义类型。

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