【问题标题】:Why does Erlang not have a C NIF drop-in replacement for calloc?为什么 Erlang 没有 C NIF 替代 calloc?
【发布时间】:2013-01-17 23:06:16
【问题描述】:

为什么 Erlang 有一个 C NIF 替代 mallocenif_alloc,而不是 calloc?从而强制在enif_alloc 之后使用memset() 进行数组访问。

【问题讨论】:

  • 我不太了解 Erlang,但在 C 语言中 calloc() 并不是那么有用。避免读取未编写的数组元素的编写良好的 C 代码可以使用malloc() 而不是calloc()。并且 calloc() 不能保证将指向 null 或浮点对象的指针设置为 0.0(尽管在大多数系统上碰巧这样做)。
  • 基思,您应该将其发布为答案。作为 cmets 的答案不是一个好主意,因为它违背了问答系统的目的。
  • 所以你的说法既然写得好c代码本身就会设置数组元素,那么就不需要calloc了吗?

标签: c erlang erlang-nif


【解决方案1】:

好吧,我认为这与事实有关(来自文档):

“在 R13B03 中作为实验性功能引入的 NIF。”

另一方面,Erlang 审查委员会也相当保守,这可能是由于其出身于电信公司的历史,这对于容错语言是可以理解的。

我想我没有看到您遇到的问题,因为我们总是欢迎您使用 calloc() 编写正确的端口并使用旧的编组方法。 http://www.erlang.org/doc/tutorial/erl_interface.html

快乐的 C 编码!

【讨论】:

  • 恭喜注册。我的印象是 NIF 会是最快的。在我的系统上,调用一个会得到 7 我们的开销。我想知道端口会是什么,我假设如果它是系统端口,它将接近相同的速度。但至少我仍然获得了原始 c 的力量——源于纯 c。
猜你喜欢
  • 2014-12-19
  • 2013-01-03
  • 2013-03-06
  • 2013-01-03
  • 2014-05-30
  • 2016-10-06
  • 2020-05-17
  • 2012-09-07
  • 2015-01-02
相关资源
最近更新 更多