4

なぜ使用するのか

void *enif_alloc(size_t size) とは対照的に

void *malloc(size_t サイズ); Erlang C NIF からメモリを割り当てようとするとき?

参考文献では、その理由についてあまり特定されていません。

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

NIF の例で malloc が使用されているのを見たことがありますが、enif_alloc は表示されません。それは何が違うのですか?使ったほうがいい理由は?

4

1 に答える 1

13

enif_alloc は、内部の erlang メモリ アロケータを使用します。つまり、メモリが内部 VM キャッシュで既に利用可能な場合、システム コールを実行してメモリを取得する代わりに、そのメモリを使用できます。これにより、場合によってはメモリ割り当てが高速になる可能性があります。コードを測定して、違いがあるかどうかを判断する必要があります。一般に、enif_alloc を使用することをお勧めします。

私が正しく覚えていれば、enif_alloc を使用すると、erlang:memory コマンドを発行するときに使用されるメモリも含まれるようになります。

于 2013-01-28T15:53:40.210 に答える