Выделение памяти в Erlang C NIF

Зачем использовать

void *enif_alloc_resource(ErlNifResourceType* type, unsigned size)

в отличие от

void *enif_alloc(size_t size)

при попытке выделить память из Erlang C NIF?

Ссылка не уточняет, почему.

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


person BAR    schedule 20.01.2013    source источник


Ответы (1)


enif_alloc_resource используется для создания ресурсов, которые виртуальная машина собирает как мусор, когда они больше не используются. enif_alloc работает точно так же, как malloc, только использует конкретную реализацию виртуальной машины Erlang, а не malloc операционной системы. Взгляните на документацию по ErlNifResourceType и функциям, которые его используют, чтобы узнать больше.

person Lukas    schedule 20.01.2013
comment
В чем разница в GC при использовании enif_alloc, это только GC, когда я его освобождаю? - person BAR; 21.01.2013
comment
gc вообще не задействован при использовании enif_alloc. Если вы хотите GC, вы должны использовать ресурсы, если вы будете управлять жизненным циклом памяти самостоятельно, используйте enif_alloc и enif_free. - person Lukas; 22.01.2013