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

Erlang list-argument memory usage (efficiency & performance)

我的印象是,在 Erlang 中调用函数时,Erlang 会将整个参数从调用者深度复制到被调用者,主要是 Erlang Efficiency Guide. However, I do notice the guide as well as the original paper 告诉我们主要关注记录而不是列表。我试图找到一个规范或解释 Erlang 如何传递列表参数的东西,但这些努力是徒劳的。

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

不知是否有这样的文档、论文或规范可以了解Erlang如何处理列表参数?毫无疑问,越官方越好,但实际上连博客或电子邮件都可以。

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

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

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