我以前听说过这个术语,我想知道如何设计和编码。
如果可用,我应该使用 STL 分配器吗?
如何在没有操作系统的设备上完成?
使用它和使用常规编译器实现的 malloc/new 之间的权衡是什么?
最佳答案
我建议您在花很多精力编写自己的内存分配器之前应该知道您需要一个非碎片内存分配器。 std 库提供的通常就足够了。
如果你需要,减少碎片的一般想法是一次获取大块内存并从池中分配,而不是要求操作系统偶尔为你提供堆内存,并在堆内高度不同的地方散布与许多其他大小不一的物体。由于专用内存分配器的作者对从池中分配的对象的大小以及这些分配如何发生有更多的了解,因此分配器可以比通用分配器(例如 STL 提供的分配器)更有效地使用内存。
您可以查看内存分配器,例如 Hoard这在减少内存碎片的同时,还可以通过提供减少争用的线程特定堆来提高性能。这可以帮助您的应用程序更线性地扩展,尤其是在多核平台上。
可以找到有关多线程分配器的更多信息 here .
关于c++ - 设计和编码一个非碎片化的静态内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923411/