我正在制作垃圾收集器,以了解它们的工作方式。
我可以处理寄存器以及堆和堆栈内存,以查找对已分配块的潜在引用。
但处理全局数据存储器却让我望而却步。
有没有办法在C中获取全局内存空间的上限和下限(如果有帮助,我在Intel OS-X上使用GCC)?
我可能错过了哪些其他记忆区域?
答案 0 :(得分:4)
我不能在这里直接给你答案,但我可以告诉你,Boehm/Demers/Weiser conservative garbage collector会有代码(可能是文档)给你看。然而,这将取决于平台。
答案 1 :(得分:1)
如果我理解正确,你想知道指针p是否指向程序全局数据区。
解决方案将依赖于平台,零初始化数据和静态初始化数据可能位于不同的位置。在C中没有任何内容指定这些区域必须存在,更不用说它们是连续的,或者不在与堆相同的范围内,甚至在函数之间。
您希望在开头有一个全局符号,在结尾有一个并使用它们的引用来检查范围。为此,您需要了解链接器。
在执行此操作之前,检查C库是否已经导出此类数据,即使它只是用于内部消费。