gpt4 book ai didi

erlang - 当我使用 MFA 生成某些内容时,如果我包含一个大列表、字典等,它会被复制吗?

转载 作者:行者123 更新时间:2023-12-02 11:32:32 26 4
gpt4 key购买 nike

这很令人困惑,因为当我更新它时它会“复制”,但据我了解,大多数时候它只是复制指针,而不是进行某种深层复制。如果我生成,它会制作某种完整的副本吗?如果我从不修改它怎么办?

最佳答案

是的,当您生成时,您需要将传递给生成函数的每个术语复制到新进程的堆中。

当您更新列表或字典时,不会复制任何未更改的元素,因为指向这些元素的指针位于同一堆中并且可用于新术语。考虑以下示例:

A = [1,2,3],
B = [0|A].

在本例中,对于 B 项,您只需在堆中为一个 cons 单元分配内存,该 cons 单元的第一个元素是项 0,第二个元素是 a指向 A 列表中第一个 cons 单元格的指针。 A 列表位于同一个堆中。

当您生成时,新进程有自己的堆,因此它使用的所有数据都必须复制到那里。

如果生成的进程不会访问大型数据结构中的所有元素,则在生成之前提取相关数据或使用 ETS 表(当您传递 ETS 表时,仅传递表引用)是有意义的但您需要复制或复制您更改或访问的任何元素)。

关于erlang - 当我使用 MFA 生成某些内容时,如果我包含一个大列表、字典等,它会被复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com