Erlang 列表参数内存使用情况(效率和性能)

Chi*_*ien 1 erlang performance

我的印象是,在 Erlang 中,当调用函数时,Erlang 会将整个参数从调用者深度复制到被调用者,这主要是由Erlang 效率指南告诉的。然而,我确实注意到指南和原始论文主要关注记录而不是列表。我试图找到一个规范或其他东西来解释 Erlang 如何传递列表参数,但这些努力都是徒劳的。

此时,我的一位同事来找我,告诉我 Erlang “通过引用”传递列表参数,就像 C 指针和 Golang 切片一样,但根据我的经验,这似乎不是真的。由于手头没有可靠的知识,我无法证明我或他的假设。

我想知道是否有这样的文档、论文或规范可以让我学习 Erlang 如何处理列表参数?毫无疑问越官方越好,但实际上即使是博客或电子邮件也可以。

Ric*_*rdC 6

调用函数时,所有数据结构均通过引用传递(例外是“立即数”,例如小整数和原子,它们直接按值传递)。对于普通的函数调用,您永远不必担心开销。

然而,当生成一个进程时,其初始函数调用的任何参数都需要复制到新进程的堆中,就像它们是在进程启动时发送到该进程的消息一样。这样,新进程是在同一台计算机上运行还是在网络上的不同计算机上运行都无关紧要。

请参阅The Beam Book,深入了解 Beam 虚拟机的工作原理。