gpt4 book ai didi

memory-management - 为什么纯函数式语言不使用引用计数?

转载 作者:行者123 更新时间:2023-12-03 06:51:27 25 4
gpt4 key购买 nike

在纯函数式语言中,数据是不可变的。通过引用计数,创建引用循环需要更改已创建的数据。看起来纯函数式语言可以使用引用计数,而不必担心循环的可能性。我是对的吗?如果是这样,他们为什么不呢?

我知道在很多情况下引用计数比 GC 慢,但至少它减少了暂停时间。在暂停时间很糟糕的情况下,如果能够选择使用引用计数,那就太好了。

最佳答案

相对于 Java 和 C# 等其他托管语言,纯函数式语言的分配非常疯狂。他们还分配不同大小的对象。已知最快的分配策略是从连续的可用空间(有时称为“托儿所”)进行分配,并保留硬件寄存器以指向下一个可用的可用空间。从堆分配的速度与从堆栈分配的速度一样快。

引用计数从根本上与这种分配策略不兼容。引用计数将对象放入空闲列表并再次将其删除。当创建新对象时,引用计数还需要大量的开销来更新引用计数(如上所述,纯函数式语言确实很疯狂)。

引用计数在以下情况下往往表现得非常好:

  • 几乎所有堆内存都用于保存事件对象。
  • 相对于其他操作,分配和指针赋值并不常见。
  • 可以在其他处理器或计算机上管理引用。

要了解当今最好的高性能引用计数系统如何工作,请查阅 David Bacon 的工作和 Erez Petrank .

关于memory-management - 为什么纯函数式语言不使用引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791437/

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