主要编译器供应商使用什么内存管理算法?

9

这是之前一个问题的子集。

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

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

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

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


2
+1,这是一个非常有趣的问题,即使只是出于学术目的 :-) - Guillem Vicens
1
对于基于GC的语言,如.Net、JVM和ObjC,内存管理器中会有不同的期望和不同的算法,这取决于内存管理器能够(或不能)从语言中可靠地获取哪些信息。请阅读http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)的内容。 - Arioch 'The
2
虽然这是一个很好的问题,但它的范围太广泛了,在这里无法回答,并且几乎不可能发布一个单一的答案来解决你所问的所有内容。很抱歉,由于这个原因,我必须投票关闭此问题,因为它不是一个真正的问题。 - Ken White
1
@KenWhite:为什么?为什么不能有人回复“VC++:使用Foo(链接)。.Net:使用Bar(链接)......”?至少,有人可能知道其中之一,并且作为协作网站,其他答案可以添加到回复中。 - David
3
有趣的问题,当我看到一些理论问题因为无效的理由被关闭时,感到遗憾。 - OnTheFly
显示剩余10条评论
1个回答

1
Objective-C使用自动引用计数(ARC)。它在iOS5及以上版本中启用。苹果拥有US专利20030196063“透明的本地和分布式内存管理系统”。
Java使用一个经过多年演变的复杂垃圾收集方案。请参见“使用5.0 Java[tm]虚拟机调整垃圾回收”http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

你在这里描述的是对象生命周期管理,而不是内存分配。内存分配是更底层的——例如,在创建对象时运行以分配内存的代码。 - David

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