为什么要使用
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。它有什么不同的做法?为什么使用它更好?
答案 0 :(得分:10)
enif_alloc使用内部erlang内存分配器,这意味着如果内存已在内部VM缓存中可用,则它可以使用该内存而不是进行系统调用来获取内存。在某些情况下,这可以导致更快的内存分配,您必须使用代码进行测量,以确定它是否有任何区别。一般来说,我建议使用enif_alloc。
如果我没记错,使用enif_alloc也会在发出erlang:memory命令时包含使用的内存。