【问题标题】:Are pointers in D under the jurisdiction of the garbage collector?D中的指针是否在垃圾收集器的管辖范围内?
【发布时间】:2014-08-14 20:15:56
【问题描述】:

我有一个程序使用大量指针来处理各种事情,当我运行它足够长的时间(大约 10 分钟)时,我开始消耗过多的 RAM,这通常会导致它停止运行(操作系统杀死它)。这让我想知道 D 中的指针是否在垃圾收集器的管辖范围内。有人可以请教我吗?

【问题讨论】:

    标签: pointers memory-management d


    【解决方案1】:

    垃圾收集器可能会扫描指针,这取决于垃圾收集器是否被指示这样做。如果您使用newGC.malloc 分配内存,则垃圾收集器可以收集该内存。如果您使用常规 C malloc 进行分配,则该内存将不会由垃圾收集器管理。 GCsome other functions 用于控制在需要时如何管理内存,但通常没有必要。

    我喜欢认为垃圾收集器非常愚蠢。它有一些根指针,它查看这些指针引用的数据以找到其他指向垃圾收集数据的指针。如果某些数据是孤立的,则可以将其释放。这就是它的本质。

    【讨论】:

    • 值得注意的是,GC 并没有那么愚蠢,并且在过去的二十年里已经发展成为庞然大物。现代跟踪、移动、分代的后台线程 GC可能成为性能瓶颈。话虽如此,目前 D 的 GC 不是世代相传的,也没有移动。所以它可以被认为是 Java 的笨表亲(我相信这是设计使然)。
    【解决方案2】:

    这让我想知道 D 中的指针是否在垃圾收集器的管辖范围内。

    是的,他们是。垃圾收集器不区分指针、动态数组、引用(ref 参数)或class 引用。

    您可能需要检查是否存在保持不需要的数据有效的剩余指针或错误指针(如果您当前的目标是 32 位,请尝试定位 64 位)。如果一切都失败了,您可以切换到reference counting 或手动内存管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2012-11-14
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多