假设
我必须存储对象的初始地址吗?假设我不在乎初始地址。相反,假设我只关心对象内部的一些指针,并且这些指针都是我存储的。假设我抛弃了初始地址。
垃圾收集器会收获我的对象吗?
其他信息
据我所知,该程序现在不收集垃圾。但是,如果该程序的未来版本开始收集垃圾,那么我今天添加的代码可能会突然变成一个难以发现的错误。我不想做一个难以发现的错误;但该计划是一个古老而稳定的计划,已有数千名用户使用多年。因此,已知程序在各种实际条件下可接受地起作用。重新设计不是一种选择。
该程序采用全球数据结构,它从不困扰free()。这是我必须在其中工作的设计。
如果你想知道:我希望存储的指针 - 指向其对象的指针'内部 - 碰巧指向ASCII字符串中的单词。我只关心单词,而不是整个字符串。特别是,我不在乎字符串开头的空格,这就是为什么我不关心字符串的初始地址;但垃圾收集者可能会无意中关心,不是吗?
存储链接的指针列表似乎很愚蠢,我和其他任何人都不会使用它,只是为了抵挡一个不存在的假设垃圾收集器;但如果真的有必要,我会存储清单。
或者我的担忧是没有根据的?无论如何,没有人会将垃圾收集添加到旧的C程序中吗?
答案 0 :(得分:2)
让我们抛开一个事实,即使用allocate()
而不是free()
的程序几乎不能被调用"稳定&#34 ;;
让我们抛开一个事实,即将垃圾收集添加到现有的大型C程序中,其中之一就是其中之一"如果你去了,只会发现痛苦"的情况。
您的问题的答案是:
这取决于垃圾收集器的工作方式。
如果它是异国情调,它可能是扫描内存并寻找指向堆内任何位置的指针,而不仅仅是内存块的开头。在这种情况下,您将被覆盖,因为指向字符串中间的指针足以使字符串保持在内存中。 (防止它被垃圾收集。)
如果它不是那种异国情调,那么它只会寻找指向内存块开头的指针。 (这是一个相当明智的事情。)在这种情况下,不,你的对象不会被锚定,除非你保持指向对象本身的指针。
就个人而言,我甚至不会尝试异国情调的垃圾收集器,但那只是我。