0

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

签名: 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

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

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

不管你喜不喜欢,内核编程都很特别。

M_FAST但是,我没有看到在 FreeBSD 内核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 回答