【问题标题】:how can I traverse the bss segment, data segment and the whole stack in virtual memory in unix如何在unix的虚拟内存中遍历bss段、数据段和整个堆栈
【发布时间】:2016-02-07 09:50:45
【问题描述】:

我正在尝试用 Mark & Sweep 策略为 C 编写一个垃圾收集器,但我不知道如何遍历 bss 段,数据段。如何获取这些段的开始地址和结束地址,如何找到栈底?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 您必须向我们展示您的搜索方式,我们才能为您提供帮助。
  • 附带说明,您认为 C 垃圾收集器(为什么? - 它基本上违背了语言的目的......)适合您的项目如果这是你的问题? ;-)
  • ISO 9899:2011 (C11) 中没有提到堆和栈。我需要您向我们提供有关您正在开发的平台的更多详细信息。

标签: c unix garbage-collection memory-segmentation


【解决方案1】:

bss 段通常有一个链接器符号,看看你的设备的启动代码(=位置,从哪里调用“main”,bss 通常在跳转到 main 之前初始化),你可以看到它是如何被引用和使用的。

栈底高度依赖处理器和操作系统,也可以有多个栈(中断栈、主栈、任务栈)。 您需要确定要查找的堆栈,然后从那里查看相应的手册(处理器、操作系统)。

无论如何 - C 中的垃圾收集听起来有点像一个奇迹 - 哪个习语会触发垃圾收集?又会收集到哪种内存?

【讨论】:

    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2014-02-03
    • 2014-06-05
    相关资源
    最近更新 更多