gpt4 book ai didi

c - 垃圾收集不是为 C 设计的,是否有特定原因?

转载 作者:太空狗 更新时间:2023-10-29 16:23:11 26 4
gpt4 key购买 nike

我听说 C 自动收集垃圾不是最理想的——这有什么道理吗?

没有为 C 实现垃圾收集是否有特定原因?

最佳答案

不要听那些“C 很旧,这就是它没有 GC 的原因”的人。 GC 存在无法克服的基本问题,这使得它与 C 不兼容。

最大的问题是准确的垃圾收集需要扫描内存并识别遇到的任何指针的能力。一些高级语言限制整数不使用所有可用的位,因此可以使用高位来区分对象引用和整数。这样的语言然后可以将字符串(可以包含任意八位字节序列)存储在一个特殊的字符串区域中,在那里它们不会与指针混淆,一切都很好。然而,C 实现无法做到这一点,因为字节、更大的整数、指针和其他一切都可以一起存储在结构、 union 中,或者作为 malloc 返回的 block 的一部分。

如果您放弃精度要求并决定您可以接受一些永远不会被释放的对象,因为程序中的某些非指针数据与这些对象的地址具有相同的位模式怎么办?现在假设您的程序从外界(网络/文件/等)接收数据。我声称我可以让你的程序泄漏任意数量的内存,并最终耗尽内存,只要我能猜出足够多的指针并在我提供给你的程序的字符串中模拟它们。如果您申请De Bruijn Sequences,这会变得容易得多.

除此之外,垃圾回收速度非常慢。你可以找到成百上千的学者不这么认为,但这不会改变现实。 GC 的性能问题可以分为 3 大类:

  • 不可预测性
  • 缓存污染
  • 花在所有内存上的时间

如今声称 GC 速度很快的人只是将其与错误的事物进行比较:编写糟糕的 C 和 C++ 程序每秒分配和释放数千或数百万个对象。是的,这些也会很慢,但至少在必要时可以测量和修复的方式上可以预见地慢。一个编写良好的 C 程序将在 malloc/free 中花费很少的时间,以至于开销甚至无法衡量。

关于c - 垃圾收集不是为 C 设计的,是否有特定原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039274/

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