MMAP共享多个对象

时间:2016-05-29 07:41:02

标签: c++ linux mmap

我正在创建一个CMA(Contiguous Memory Allocator)用户端驱动程序,我已经编写了一些空间区域。如果我创建了第二个对象,它想要映射相同的内存区域,是否可以搜索它已经被mmaped并传回该地址?目前,每个对象都会创建自己的mmap,它可以工作,但在性能方面是个好主意吗?

该类用于映射不同的内存区域,具体取决于构造函数中传递的内容,因此静态不起作用。

1 个答案:

答案 0 :(得分:0)

我并非100%确定您想要实现的目标,但我猜您希望优化分配,以便在相同应用程序中多次使用相同区域时减少开销。

内核需要跟踪对物理内存页面的每个引用,所以如果你跟踪分配并返回相同的指针"在您的代码中,您需要自己引用计算分配,并且只在需要时进行分配/免费。

我会在用户模式级别执行此操作,基本上保留一个std::map(或类似的)键入基础内存和大小,然后引用计数该分配,并且只调用{{1}当引用计数达到零时(当然只能在找不到该区域时调用munmap)。它变得更有趣"如果你有多个不同大小的分配到同一个区域,但我不认为有一种方法可以为此实现(井) - 至少在第二个呼叫请求更大的分配时是这样。

在用户模式下执行此操作的好处很明显:如果您在记帐中犯了错误,如果应用程序停止,内核仍会释放内存。并且内核模式中mmap [或它的等效]的内存分配也将更难处理。