为什么要用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。它有什么不同?为什么使用它更好?
hfsqlsce1#
enif_alloc使用内部Erlang内存分配器,这意味着如果内存已经在内部VM缓存中可用,它可以使用该内存,而不是执行系统调用来获取内存。这可以在某些情况下导致更快的内存分配,您将不得不用您的代码来衡量它是否会产生任何差异。一般来说,我建议使用enif_alloc。如果我没记错的话,使用enif_alloc也会在发出erlang:memory命令时包括所使用的内存。
enif_alloc
erlang:memory
1条答案
按热度按时间hfsqlsce1#
enif_alloc
使用内部Erlang内存分配器,这意味着如果内存已经在内部VM缓存中可用,它可以使用该内存,而不是执行系统调用来获取内存。这可以在某些情况下导致更快的内存分配,您将不得不用您的代码来衡量它是否会产生任何差异。一般来说,我建议使用enif_alloc
。如果我没记错的话,使用
enif_alloc
也会在发出erlang:memory
命令时包括所使用的内存。