自定义内存分配-C与C++



我一直在学习C++,并遇到了自定义内存分配器的主题。我已经了解到,通过设计一个分配器并将这个分配器与标准库容器一起使用,我们可以避免堆分配。此外,我们似乎可以避免记忆碎片化。这在一定程度上是通过使用placement new和placement delete操作符来实现的。

在C中是否也可以设计自定义内存分配器,这样我们就可以控制内存分配并避免碎片?如果可能的话,C++是否只是提供了具有更高抽象级别的功能?

C和C++都是低魔力语言。C特别在你背后分配很少的内存。例如,对于vararg函数可能会这样做,但几乎每个正常的数据结构都是由程序员显式分配的。如果调用malloc,则使用默认堆。如果你调用其他东西,就会使用其他东西。

您始终可以编写自定义内存分配器和自己的malloc(类似于C++中的new(和free(可与delete相比(实现。jemalloc是一个强调避免碎片的分配器示例。

C++通过std::allocater 以更高级、更抽象的方式提供分配器

您可以分配一大块内存或声明一个巨大的数组,然后使用类似于buddy算法的东西作为自定义分配器。您所需要做的就是#define malloc和free来指向您的分配和解除分配例程。

如果你是一个windows程序员,旧的MFC程序会有类似的东西

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

这将new重新定义为跟踪泄漏的调试版本。

相关内容

  • 没有找到相关文章

最新更新