Почему в Erlang есть замена C NIF для malloc
, enif_alloc
, но не calloc
? Тем самым вынуждая использовать memset()
после enif_alloc
для доступа к массиву.
Почему в Erlang нет замены C NIF для calloc?
Ответы (1)
Ну, я предполагаю, что это связано с тем фактом (из документации):
"Файлы NIF были представлены в R13B03 в качестве экспериментальной функции".
С другой стороны, обзорная комиссия Erlang также довольно консервативна, вероятно, из-за того, что она родилась в телекоммуникационной компании, и это понятно для отказоустойчивых языков.
Думаю, я не вижу проблемы, с которой вы столкнулись, поскольку вы всегда можете написать правильный порт с помощью calloc() и использовать старые методы маршалинга. http://www.erlang.org/doc/tutorial/erl_interface.html
Удачного программирования на C!
person
ngunder
schedule
13.02.2013
Поздравляю с регистрацией. У меня сложилось впечатление, что NIF будет быстрее. В моей системе я получаю накладные расходы в размере 7 долларов США за вызов одного из них. Интересно, что это будет с портом, я предполагаю, что если это системный порт, он будет близок к той же скорости. Но, по крайней мере, я все еще получаю эту грубую силу с, рожденную чистым с.
- person BAR; 17.02.2013
calloc()
не так уж и полезен. Хорошо написанный код C, который избегает чтения элементов массива, которые он не написал, может использоватьmalloc()
, а неcalloc()
. Иcalloc()
не гарантирует, что указатели на нулевые объекты или объекты с плавающей запятой будут установлены в 0,0 (хотя это происходит в большинстве систем). - person Keith Thompson   schedule 03.02.2013