MMAP共享多个对象

MMAP共享多个对象

问题描述:

我正在创建一个CMA(连续内存分配器)用户端驱动程序,并且我已经对一些空间区域进行了缩小处理。如果我创建了第二个对象,它想要映射相同的内存区域,是否可以搜索它已经被mmaped并传回该地址?目前,每个对象都将制作自己的mmap,它的工作原理但在性能方面是一个好主意?MMAP共享多个对象

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

+0

”在性能方面是一个好主意吗?“为什么不测量它? –

+0

措施是什么?我没有替代方法了:) – user1876942

+0

将它映射两次,然后映射一次并重新使用该映射。 –

我不是100%确定你想达到什么,但我猜你想优化分配,这样如果同一个区域在同一个应用程序中多次使用,你的开销就会减少。

内核需要跟踪每个引用到一个物理内存页面,因此如果您在代码中“跟踪分配并返回相同的指针”,您将需要引用自己计算分配,并且只执行分配/当需要时免费。我会在用户模式级别执行该操作,基本上保持键入底层内存和大小的std::map(或类似),然后引用对该分配进行计数,并且当引用计数达到零时仅调用munmap(当该地区无法找到时,当然只能拨打mmap)。如果你有多个不同大小的分配到同一个区域,它会变得更加“有趣”,但是我认为没有一种方法可以实现这一点 - 至少在第二次调用请求更大的分配。

在用户模式下这样做的好处很明显:如果您在会计中犯了错误,内核仍会在应用程序停止时释放内存。内核模式下的内存分配std::map [或者相当于]也将更难处理。 “

+0

这是我的想法。我将把它留给我的驱动程序的用户来维护已映射的地址和计数。 – user1876942