我想编写自己的内存管理器。目标语言是C++,该内存管理器的主要目的是帮助调试。它应该能够检测重复释放、内存覆盖等问题。当然,我也想学习关于内存管理方面的知识。
是否有人可以给我一些提示或资源,让我学会如何编写这样的内存管理器呢?
谢谢你的帮助。
我想编写自己的内存管理器。目标语言是C++,该内存管理器的主要目的是帮助调试。它应该能够检测重复释放、内存覆盖等问题。当然,我也想学习关于内存管理方面的知识。
是否有人可以给我一些提示或资源,让我学会如何编写这样的内存管理器呢?
谢谢你的帮助。
我认为这是一个非常有趣的项目,您可以从中学到很多东西。以下是有关内存管理主题的一些阅读材料。它涵盖了一些基本的内存管理知识,介绍了一个简单的malloc实现,然后涉及了一些更高级的主题。
另外,既然您提到您想要制作一个对于调试有用的内存管理器,您可能想考虑阅读Memcheck / Valgrind开发人员编写的这篇论文(一个Linux上出色的内存调试器)。它详细介绍了他们如何在memchck中跟踪所有元数据(特定字节是否已定义,初始化等)。这篇论文内容有点复杂,但它是一份好的阅读材料,可以帮助您制作可伸缩和高效的动态内存检查器。
我看到一些示例使用C预处理器宏来实现malloc
。这是一个聪明的想法。我相信你也可以写出类似的东西。
这里有一个看起来不错的起点。
正如@Spence所说,这已经做过很多次了。但出于学习的目的,这还是相当有趣的。
我建议您看一下ld的--wrap Here,因为它非常有用。
你可以使用malloc和free来实现大部分功能 - 实际上,即使不必要,很多C++内存管理器也是这样实现的。
你可以从一个简单的实现开始,它维护所有分配和释放的日志,但将常规的分配/释放转发到malloc和free。显然,简单的实现也不应该使用new/delete...
所以,你可以:
我认为你可以从一个智能指针实现开始,它在后台使用基本的引用计数。这些是内存管理的基础,可以让你入门。然后,你可以使用自己的实现来创建更高级的内存管理器。
“Electric fence”是一个基本的起点,可能会有所帮助。它本质上具有自定义的malloc和free实现,提供了调试功能。
然而,据我所知,它并没有集成到C++的new/delete运算符中,但是提供自定义的全局new/delete实现,以便推迟到电子围栏例程,这不会太难。
你用的是什么平台?在你尝试重新实现整个系统之前,想知道是否可以使用valgrind或lint来帮助你解决问题?