gpt4 book ai didi

d - 为什么有些功能需要 GC?

转载 作者:行者123 更新时间:2023-12-04 00:15:03 27 4
gpt4 key购买 nike

为什么追加到数组需要 GC?

C++ 不需要它。为什么关闭 GC 会导致某些功能泄漏。

如果我没记错的话,D 被设计为 [能够] 在没有 GC 的情况下使用。

请给出全面的答案。

最佳答案

“为什么有些功能需要 GC?”是一个简单的问题:因为 D 在设计时就考虑到了 GC。 GC 使程序员能够以某种方式编写代码,而将其关闭意味着您不能以这种方式编写代码。具体来说,它会为您清理内存,因此当您关闭它时,您需要手动执行此操作。

Steven Schveighoffer's article on D slices很好地涵盖了 D 切片(又名数组)的主题。

D 的切片不拥有它们指向的数据 - 运行时拥有。这意味着多个切片可能指向相同的数据,并且当不再需要数据时,它们不必弄清楚其中哪一个负责对数据进行 free() 处理。在 C++ 中,您可以使用 shared_ptr<T[]> 来做到这一点。 ,如果我理解正确的话(我做了很多 C++ 已经有几年了)。 shared_ptr具有其他引用计数系统具有的相同问题 - 特别是循环引用。 GC 以更少的麻烦做同样的事情,但代价是有时会使用更多的内存或速度更慢(尽管应该说 RC 可能会遇到完全相同的问题,只是在不同的情况下)。

至于 D 被设计为在没有 GC 的情况下使用 - 不,不是真的。它最初在设计时考虑了 GC,并且它获得了一些特性,使得在没有 GC 的情况下工作变得更加容易。其中最主要的是 @nogc ,它表示“此函数可能不会通过 GC 分配,并且可能不会调用任何可能通过 GC 分配的函数”。当一个函数被标记为 @nogc ,编译器会强制执行,拒绝编译违反此 promise 的代码。

有些库可以提供与标准代码相同的舒适性,在 @nogc 中代码。我对他们没有经验,但是Tanyanogc是两个例子。我没有仔细研究过他们的工作方式,但我认为他们也在使用 RC。

关于d - 为什么有些功能需要 GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64599148/

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