【问题标题】:Does C have a garbage collector like Java does?C 有像 Java 那样的垃圾收集器吗?
【发布时间】:2012-02-07 12:16:36
【问题描述】:

如果我们在 Java 中做这样的事情,在 C 中会发生什么:

    temp.next = temp.next.next;

temp.next 节点会发生什么?在 Java 中有一个转储/垃圾收集器; C中有类似的东西吗?

【问题讨论】:

  • 问题的标题应该是“Does C have agarbage collector”问题应该不同。答案是否定的。
  • C 没有垃圾回收。如果您有兴趣了解原因,stackoverflow.com/questions/4039274/…

标签: c list malloc


【解决方案1】:

什么都不会发生。它将继续使用内存,您将失去任何使用或释放​​它的方法。

在 C 语言中,当你完成它时,你必须显式地 free 通过 malloc 获得的东西,没有引用计数或垃圾收集之类的东西。

【讨论】:

    【解决方案2】:

    C 没有自动垃圾收集。如果您忘记了某个对象,您就会遇到所谓的“内存泄漏”。内存仍将作为一个整体分配给程序,但如果您丢失了指向它的最后一个指针,将无法使用它。内存资源管理是 C 程序的关键要求。因此,每当您在 C 中动态分配内存时,您都需要知道何时以及如何释放它。

    有专门为您提供帮助的工具。一个值得注意的是valgrind,它使用与商业上可用的Purify类似的技术。

    【讨论】:

      【解决方案3】:

      在c中,如果你不free你通过malloc分配的内存,它只会坐在那里什么都不做,直到程序执行结束。

      与 Java 不同,C 没有垃圾收集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 2013-04-01
        • 2023-03-30
        • 2019-11-08
        相关资源
        最近更新 更多