【发布时间】:2014-08-14 20:15:56
【问题描述】:
我有一个程序使用大量指针来处理各种事情,当我运行它足够长的时间(大约 10 分钟)时,我开始消耗过多的 RAM,这通常会导致它停止运行(操作系统杀死它)。这让我想知道 D 中的指针是否在垃圾收集器的管辖范围内。有人可以请教我吗?
【问题讨论】:
标签: pointers memory-management d
我有一个程序使用大量指针来处理各种事情,当我运行它足够长的时间(大约 10 分钟)时,我开始消耗过多的 RAM,这通常会导致它停止运行(操作系统杀死它)。这让我想知道 D 中的指针是否在垃圾收集器的管辖范围内。有人可以请教我吗?
【问题讨论】:
标签: pointers memory-management d
垃圾收集器可能会扫描指针,这取决于垃圾收集器是否被指示这样做。如果您使用new 或GC.malloc 分配内存,则垃圾收集器可以收集该内存。如果您使用常规 C malloc 进行分配,则该内存将不会由垃圾收集器管理。 GC 有 some other functions 用于控制在需要时如何管理内存,但通常没有必要。
我喜欢认为垃圾收集器非常愚蠢。它有一些根指针,它查看这些指针引用的数据以找到其他指向垃圾收集数据的指针。如果某些数据是孤立的,则可以将其释放。这就是它的本质。
【讨论】:
这让我想知道 D 中的指针是否在垃圾收集器的管辖范围内。
是的,他们是。垃圾收集器不区分指针、动态数组、引用(ref 参数)或class 引用。
您可能需要检查是否存在保持不需要的数据有效的剩余指针或错误指针(如果您当前的目标是 32 位,请尝试定位 64 位)。如果一切都失败了,您可以切换到reference counting 或手动内存管理。
【讨论】: