在iOS 5下的Haskell内存管理

11

我希望将Haskell引擎作为C库嵌入到IOS 5项目中 - 在IOS应用程序内运行Haskell代码。因此,我有几个问题:

  1. 是否已知在ARC下Haskell会暴露出任何内存管理问题?
  2. 我如何确保Haskell不会干扰IOS的内存管理?
  3. 处理这些问题的有效策略可能是什么?

1
我修改了你的问题,以更具体地描述你似乎提出的问题。你应该在另一个问题中询问第四点(与内存管理无关)。 - Robert Harvey
GHC现在可以交叉编译到ARM了? :O - Phyx
ARC及其语义针对的是Objective-C。它将通过静态分析为您释放和保留,但仅适用于Objective-C。这种内存管理称为引用计数垃圾回收,但由于某种原因,苹果拒绝将其称为垃圾收集器。因此,您可以将其视为手动内存管理,只不过是由编译器添加的。因此,据我所知,它不应影响C库,因为它不使用Objective-C语义。 - fisk
@fisk:苹果很可能不会将ARC称为垃圾回收,原因有两个:1)因为“垃圾回收”一词通常用于指Java和其他现代语言使用的标记和扫描类型,这些语言依赖于运行时线程来清理内存,而苹果明确希望澄清ARC不是这种方式;2)因为Objective C已经有一个标记和扫描垃圾回收系统,称为“Objective-C垃圾回收”,它在Mac OS上使用,并且早于ARC,因此,将ARC称为垃圾回收会引起很多混乱。 - Nick Lockwood
@NickLockwood 你可能指的是追踪垃圾收集器。标记和清除是其中一种变体。复制和拷贝收集器是其他追踪垃圾收集器。 - fisk
@fisk 是的,你说得对。 - Nick Lockwood
1个回答

1

ARC 是一种严格的编译时代码生成过程,与 Objective-C 代码相关。ARC 基本上意味着“在编译时将 retain、release 和 autorelease 语句插入源代码中,以便程序员不必手动添加”。

因此,ARC 对非 Objective-C 代码(即常规 C 库)不会产生任何影响,并且没有运行时行为可能会干扰 Haskell 引擎的垃圾回收行为。

*实际上 ARC 的工作方式并不是这样,它生成优化后的汇编代码而不是源代码,但作为类比,这是它如何工作的一个很好的描述。

**严格来说,ARC 并不是没有运行时行为,因为在运行时会发生弱指针管理,但同样只适用于 Objective-C 对象,对 Haskell 代码不会产生任何影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接