erlang 为什么使用enif_alloc而不是malloc

webghufk  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(147)

为什么要用
void *enif_alloc(size_t size)与
void *malloc(大小_t大小);当试图从Erlang C NIF分配内存时会出现什么情况?
参考文献没有详细说明原因。
http://www.erlang.org/doc/man/erl_nif.html#enif_alloc
我看过使用malloc的NIF例子,但从来没有看到过enif_alloc。它有什么不同?为什么使用它更好?

hfsqlsce

hfsqlsce1#

enif_alloc使用内部Erlang内存分配器,这意味着如果内存已经在内部VM缓存中可用,它可以使用该内存,而不是执行系统调用来获取内存。这可以在某些情况下导致更快的内存分配,您将不得不用您的代码来衡量它是否会产生任何差异。一般来说,我建议使用enif_alloc
如果我没记错的话,使用enif_alloc也会在发出erlang:memory命令时包括所使用的内存。

相关问题