【问题标题】:is there a flag "M_FAST" in FreeBSD kernel for Malloc Call?FreeBSD 内核中是否有用于 Malloc 调用的标志“M_FAST”?
【发布时间】:2010-12-13 16:16:35
【问题描述】:

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

签名: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 进行了说明。

【问题讨论】:

    标签: c++ c malloc freebsd


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果文档没有提到 M_FAST 标志,并且它没有在平台上的 <stdlib.h> 标头中定义,您可以放心地假设它不存在(或者更确切地说,如果它存在,它不会t 是适合在用户代码中使用的稳定 API)。

      【讨论】:

      • 内核的 malloc 标志在 FreeBSD 的 /sys/malloc.h 中
      【解决方案3】:

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

      在编写内核代码时(对于许多系统,不仅仅是 FreeBSD),通常会有一些限制阻止内核代码使用标准库,因此通常会有一个内核库提供类似的功能,但与标准的异同范围也不尽相同.

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

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

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

      【讨论】:

      • 非常感谢您为我解惑,先生,您让我很开心 :)。我发布了关于 M_WAIT 的说明。
      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 2020-05-03
      • 2015-03-28
      • 1970-01-01
      • 2021-01-19
      • 2013-01-15
      • 2015-01-09
      • 1970-01-01
      相关资源
      最近更新 更多