c++ - 设计和编码一个非碎片化的静态内存池

标签 c++ c stl fragmentation memory-pool

我以前听说过这个术语,我想知道如何设计和编码。
如果可用,我应该使用 STL 分配器吗?
如何在没有操作系统的设备上完成?
使用它和使用常规编译器实现的 malloc/new 之间的权衡是什么?

最佳答案

我建议您在花很多精力编写自己的内存分配器之前应该知道您需要一个非碎片内存分配器。 std 库提供的通常就足够了。

如果你需要,减少碎片的一般想法是一次获取大块内存并从池中分配,而不是要求操作系统偶尔为你提供堆内存,并在堆内高度不同的地方散布与许多其他大小不一的物体。由于专用内存分配器的作者对从池中分配的对象的大小以及这些分配如何发生有更多的了解,因此分配器可以比通用分配器(例如 STL 提供的分配器)更有效地使用内存。

您可以查看内存分配器,例如 Hoard这在减少内存碎片的同时,还可以通过提供减少争用的线程特定堆来提高性能。这可以帮助您的应用程序更线性地扩展,尤其是在多核平台上。

可以找到有关多线程分配器的更多信息 here .

关于c++ - 设计和编码一个非碎片化的静态内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923411/

相关文章:

c++ - 什么时候创建本地静态对象?

C++/Qt 对象到 vector 并返回到对象

c++ - 当并非所有枚举值都在 C++ 中的 switch 语句中处理时的编译时断言

c - 在函数调用期间获取错误的变量地址

python - 与 array[++i] 和 array[i++] 在 Python 中比较的代码?

c++ - 如何从 std vector 前面读取并删除读取变量?

c++ - qt - 在父窗口/小部件类中初始化子小部件的目的是什么?

c - 使用 fwrite() 将标准输入写入文件

c++ - 如何使用 C++ 中的指定位置获取 Vector 中的元素?

c++ - 为什么将 std::sort 与自定义比较器一起使用无法编译?