为什么使用enif_alloc而不是malloc

时间:2013-01-28 14:00:09

标签: c erlang malloc

为什么要使用

void * enif_alloc(size_t size)

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

参考文献没有详细说明原因。

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

我见过NIF的例子是malloc被使用了,我从来没有看到过enif_alloc。它有什么不同的做法?为什么使用它更好?

1 个答案:

答案 0 :(得分:10)

enif_alloc使用内部erlang内存分配器,这意味着如果内存已在内部VM缓存中可用,则它可以使用该内存而不是进行系统调用来获取内存。在某些情况下,这可以导致更快的内存分配,您必须使用代码进行测量,以确定它是否有任何区别。一般来说,我建议使用enif_alloc。

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