【问题标题】:Why use enif_alloc instead of malloc为什么使用 enif_alloc 而不是 malloc
【发布时间】:2013-01-11 21:20:01
【问题描述】:

为什么要使用

void *enif_alloc(size_t 大小) 而不是

void *malloc(size_t size); 尝试从 Erlang C NIF 分配内存时?

参考并没有详细说明原因。

http://www.erlang.org/doc/man/erl_nif.html#enif_alloc

我见过使用 malloc 的 NIF 示例,但我从未见过 enif_alloc。它有什么不同?为什么更好用?

【问题讨论】:

  • 看到他也是这个问题的 OP 真是令人震惊。 stackoverflow.com/questions/14420970/…
  • 这是一个不同的问题,几乎无法拼凑出答案。
  • @Sibrajas 那有什么问题?它不是重复的。最好每个问题写一篇文章,而不是在一篇文章中写一篇“超级文章”,其中包含几个可能不相关的问题。

标签: c erlang malloc


【解决方案1】:

enif_alloc 使用内部 erlang 内存分配器,这意味着如果内存已经在内部 VM 缓存中可用,它可以使用该内存而不是执行系统调用来获取内存。在某些情况下,这可能会导致更快的内存分配,你必须用你的代码来衡量它是否有任何区别。一般来说,我会推荐使用 enif_alloc。

如果我没记错的话,使用 enif_alloc 也会在发出 erlang:memory 命令时包含使用的内存。

【讨论】:

  • 完美的理由正是我所寻找的。现在你到底是怎么知道的??我在哪里可以学习?
  • 这条特殊的信息来自阅读 erts_alloc、erl_nif 手册页和相应的源代码。您还必须了解内存分配器在一般情况下是如何工作的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
相关资源
最近更新 更多