9

这是上一个问题的一个子集。

作为一个练习,我正在编写一个内存管理器——即实现 malloc、realloc 和 free(或 new 和 delete)的代码。我的语言 Delphi的 RTL 允许轻松替换 RTL 的内存管理器。对于那些使用 C++ 的人来说,这与覆盖 new 和 delete 类似,但级别更低(它与 RTL 本身挂钩,而不是作为一种语言特性。)

我正在寻找有关其他人对同一问题采取的高质量方法的资源,并试图找出其他主要编译器供应商使用的算法。虽然 Delphi 有很好的文档记录,但我找不到有关 MS VC++、.Net 或 Objective C 使用的实现的任何信息。这些供应商似乎(?)不允许他们的 RTL 像 Delphi 那样被挂钩。所有文档似乎都是更高级别的,例如NSAutoReleasePool选择一个随机示例 - 对于这个问题来说太高级了。

主要供应商(Microsoft VC++ 和 .Net,以及 Apple Objective C)在其运行时库中使用哪些内存管理算法?

一个很好的答案的例子是描述内存管理器实现的文档,例如这个,或者指向已发表论文的链接。一个有用的答案的例子是算法,“VC++ 运行时使用Hoard 分配器”。

4

1 回答 1

1

Objective-C 使用自动引用计数 (ARC)。它从 iOS5 开始启用。Apple 拥有美国专利 20030196063“透明的本地和分布式内存管理系统”。

Java 使用经过多年发展的复杂垃圾收集方案。请参阅“使用 5.0 Java[tm] 虚拟机调整垃圾收集” http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

于 2013-05-14T04:45:21.470 回答