如何获取C中全局数据区的上限和下限?

时间:2010-03-05 09:19:12

标签: c global-variables garbage-collection

我正在制作垃圾收集器,以了解它们的工作方式。

我可以处理寄存器以及堆和堆栈内存,以查找对已分配块的潜在引用。

但处理全局数据存储器却让我望而却步。

有没有办法在C中获取全局内存空间的上限和下限(如果有帮助,我在Intel OS-X上使用GCC)?

我可能错过了哪些其他记忆区域?

2 个答案:

答案 0 :(得分:4)

我不能在这里直接给你答案,但我可以告诉你,Boehm/Demers/Weiser conservative garbage collector会有代码(可能是文档)给你看。然而,这将取决于平台。

答案 1 :(得分:1)

如果我理解正确,你想知道指针p是否指向程序全局数据区。

解决方案将依赖于平台,零初始化数据和静态初始化数据可能位于不同的位置。在C中没有任何内容指定这些区域必须存在,更不用说它们是连续的,或者不在与堆相同的范围内,甚至在函数之间。

您希望在开头有一个全局符号,在结尾有一个并使用它们的引用来检查范围。为此,您需要了解链接器。

在执行此操作之前,检查C库是否已经导出此类数据,即使它只是用于内部消费。