为什么Erlang没有C NIF的calloc替代品?

3
为什么Erlang有一个C NIF替代品mallocenif_alloc,但没有calloc?这迫使人们在使用enif_alloc进行数组访问后使用memset()

4
我不是很了解Erlang,但在C中,calloc()并不是非常有用。编写良好的C代码可以避免读取未写入的数组元素,因此可以使用malloc()而不是calloc()。并且calloc()不能保证将指针设置为null或将浮点数对象设置为0.0(尽管它在大多数系统上都这样做)。 - Keith Thompson
Keith,你应该将其发布为答案。在评论中回答问题并不是一个好主意,因为这会破坏问答系统的目的。 - Emil Vikström
你的意思是说,既然编写良好的 C 代码会自己设置数组元素,那么就不需要使用 calloc 了? - BAR
1个回答

2
我认为这与以下事实有关(来自文档):
“NIFs是在R13B03中作为实验性功能引入的。”
顺便提一下,由于Erlang起源于电信公司,Erlang审查委员会也非常保守,这对于容错语言来说是可以理解的。
我想我没有看到你所遇到的问题,因为你随时可以编写一个适当的端口,使用calloc()并使用旧的封送方法。 http://www.erlang.org/doc/tutorial/erl_interface.html 祝愉快的C编码!

恭喜您注册成功。我原本以为 NIF 会更快,但在我的系统上,调用一个 NIF 的开销为 7 微秒。我想知道使用端口的话会是多少,如果是系统端口的话应该速度会差不多。但至少我仍然可以获得纯 C 所带来的原始 C 力量。 - BAR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接