D语言中的指针是否受垃圾回收器管理?

4

我有一个程序,其中使用了大量指针来完成各种任务,当我运行它足够长的时间(大约10分钟),我的内存消耗就会异常增加,这通常会导致程序停止运行(操作系统杀死它)。这让我想知道D语言中的指针是否受垃圾回收器的管辖。请问有人能给我解答一下吗?

2个回答

7
指针可能会被垃圾回收器扫描,这取决于是否已经指示垃圾回收器执行该操作。如果您使用newGC.malloc分配内存,则该内存可以被垃圾回收器收集。如果您使用常规C malloc进行分配,则该内存将不受垃圾回收器管理。GC一些其他函数可控制如何管理内存(如果需要),但通常不必要。

我喜欢把垃圾回收器想象成非常愚蠢的东西。它有一些根指针,查看这些指针引用的数据以查找到垃圾收集数据的其他指针。如果某些数据被孤立了,那么它就可以被释放。这就是它所做的本质。


值得注意的是,垃圾收集器并不愚蠢,并且在过去的二十年中已经发展成为庞然大物。现代的追踪、移动、分代后台线程GC 可能 会成为性能瓶颈。话虽如此,目前D语言的GC并非分代式,也不是移动式的。因此,它可以被视为Java语言的笨拙表亲(我认为这是有意设计的)。 - Amir Abiri

3
这让我想知道D语言中的指针是否受到垃圾回收器的管辖。
是的,它们受到垃圾回收器的管辖。垃圾回收器不区分指针、动态数组、引用(ref参数)或class引用。
您可能需要检查剩余的指针,以保持不需要的数据处于活动状态,或者伪造的指针(如果您当前正在针对32位,请尝试针对64位)。如果所有其他方法都失败了,您可以切换到引用计数或手动内存管理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接