4

为什么要使用

void *enif_alloc(size_t size) 而不是

无效 *malloc(size_t 大小); 尝试从 Erlang C NIF 分配内存时?

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

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

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

4

1 回答 1

13

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

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

于 2013-01-28T15:53:40.210 回答