c++ - 是否存在不在其分配中存储元数据的自定义内存分配器设计模式?

标签 c++ memory-management cuda memory-pool tcmalloc

<分区>

基本上,我需要一个内存池来快速分配小对象。理想情况下,我想用 cudaMalloc 替换主机上的分配以及 GPU 上分配的内存。我可以编写自己的代码,如果需要的话,我会这样做,但我不介意换用一种可靠的开源实现。

唯一的问题是,对于 cudaMalloc,内存池无法触及分配的内存。我的理解是许多(全部?)常见的内存分配器,如标题中的那些,在分配的数据中存储少量元数据。因此它们不起作用。

有谁知道不是这种情况的内存分配器?

最佳答案

如果您所有的小分配大小相同或具有合理的上限,那么固定大小的池分配器是一个很好的模式。

这个想法是,分配器使用系统调用获取一个大块,然后在大块内管理它自己的固定大小块的空闲列表。分配就像获取空闲列表头部的 block 一样简单。解除分配稍微复杂一些,但可以根据您的要求以不同的方式实现。

自己编写很简单,或者如果你用谷歌搜索 C++ 固定大小分配器,你可以找到许多不错的实现,包括 boost::pool

关于c++ - 是否存在不在其分配中存储元数据的自定义内存分配器设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153449/

相关文章:

c++ - 将文件写入 USB 内存棒会导致意外删除时文件损坏/锁定

c++ - Boost元函数类高阶函数

linux - Linux 中的堆栈预故障 - 需要单个或多个故障

c - 分析 cublas 应用程序

具有抽象类指针的对象的 C++ 拷贝

c++ - ISO-10646 XFont 编码问题

c++ - munmap_chunk() - 无效指针错误

c++ - QT - 主要小部件 - 堆栈还是堆?

c++ - 如何在 CUDA 中执行多个矩阵乘法?

c++ - OpenCV - Brox 光流 - opencv_core244d!cv::GlBuffer::unbind 异常