为什么在尝试从Erlang C NIF中分配内存时,会使用void *enif_alloc(size_t size)而不是void *malloc(size_t size);?
参考资料没有明确说明原因。
参考资料没有明确说明原因。
http://www.erlang.org/doc/man/erl_nif.html#enif_alloc
我看到过使用malloc的NIF示例,但从未见过enif_alloc。它有什么不同?为什么最好使用它?
http://www.erlang.org/doc/man/erl_nif.html#enif_alloc
我看到过使用malloc的NIF示例,但从未见过enif_alloc。它有什么不同?为什么最好使用它?
enif_alloc
使用内部 erlang 内存分配器,这意味着如果内部 VM 缓存中已经有可用的内存,则可以使用该内存,而不必进行系统调用以获取内存。在某些情况下,这可能会导致更快的内存分配,您将需要使用您的代码进行测量来确定是否有任何差异。总体而言,我建议使用 enif_alloc
。
如果我记得正确地使用 enif_alloc
,则使用时所占用的内存也将包含在 issuing the erlang:memory
命令中。