【发布时间】:2014-03-20 21:30:42
【问题描述】:
所以基本上我只知道一些GC的基本概念:(
我是函数式编程语言的新手,在研究 Haskell 的运行时系统RTS 时,我发现 RTS 支持对 Haskell 编译的二进制文件进行 GC。
所以我对这部分感到困惑,是否有一个由 RTS 创建的单独进程可以对 Haskell 二进制文件执行 GC 操作?
如果有的话,还有 C/C++ 的 GC 实现吗? (假设程序员只使用一种“智能指针”来使用内存,他们不需要关心内存管理,GC 进程会处理它)......?据我所知,.net 似乎可以这样工作……对吗?
【问题讨论】:
-
您是否在互联网上搜索过“C 的垃圾收集器”?
-
您说“我比较熟悉...... Sun 的 JVM 中使用的具体 GC 技术”。这是真的吗?你了解卡片标记、任期、清理等吗?或者您是说您从编写 Java 代码的人的角度熟悉 GC 的工作原理?此外,您是否熟悉 C 运行时在您选择的平台上的工作方式?你知道
malloc和free是如何工作的吗?很难从您的问题中确切地看出您正在寻找什么样的答案。 -
一旦你意识到 GC 不是免费的——它需要与使用它的二进制文件合作,例如,通过运行时系统分配内存而不是而不是以任意方式。当然,反正二进制是由 GHC 构建的,这对 GHC 来说是很容易保证的;它只是在每个分配点插入适当的合作。
-
C++ 程序员使用 RAII 进行自动内存管理,而不是垃圾回收。
-
@DanielWagner 是的,你是对的,我为自己声称自己“我比较熟悉XXX”而感到羞耻......谢谢!
标签: c++ c haskell memory-management garbage-collection