理解内存管理器

市面上有许多商业性的内存管理器,许多更多自定义的设计和实现跑在大量应用上。由于我们的目标不是编写一个自己的新的内存管理器,理解内存管理器设计和实现的每一个细节是不必要的。学习每一个内存管理器也不具有可操作性的。但是如果你在调试涉及堆内存的问题,知道一个特定的内存管理器是怎么样在你的程序中记录用户内存块是绝对重要和有帮助的。

看在调试的面子上,我们最感兴趣的是给定一个有引用的被管理的内存块,它的状态是什么。用另外的话说,我们需要知道足够多的堆数据结构来搞明白一个内存块。虽然内存管理器可能使用不同的数据结构,它们不用说具有许多相似点。如果你熟悉一种或多种典型的实现,你会更快理解一种特定的内存管理器。

因此在接下来的章节,我将介绍两种受欢迎的内存管理器ptmalloc和TCmalloc(XT: 原文是一种商业的内存器,但为避免不必要的麻烦,本译文改成开源的TCmalloc)。Ptmalloc是一个开源的项目,被Linux Red Hat发行版和其他应用使用的C运行库使用;TCmallo也是另外一个开源项目,Google团队出品。为了关注调试主题,对它们设计和不相关的实现细节广泛讨论被跳过。