gpt4 book ai didi

c++ - 多个对象的 MMAP 共享

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:08 25 4
gpt4 key购买 nike

我正在创建一个 CMA(连续内存分配器)用户端驱动程序,并且我映射了一些空间区域。如果我创建第二个对象,它想要映射相同的内存区域,是否可以搜索它已经被映射并传回该地址?目前,每个对象都会制作自己的 mmap,它可以工作,但就性能而言这是个好主意吗?

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

最佳答案

我不是 100% 确定您想要实现什么,但我猜您想要优化分配,以便在同一应用程序中多次使用同一区域时减少开销。

内核需要跟踪对物理内存页的每次引用,因此如果您在代码中“跟踪分配并返回相同的指针”,您将需要自己对分配进行引用计数,并且只进行分配/释放在需要的时候。

我会在用户模式级别执行它,基本上保留一个 std::map (或类似的),它以底层内存和大小为键,然后对该分配进行引用计数,并且只有在引用计数为零时才调用 munmap(当然只有在找不到该区域时才调用 mmap)。如果您对同一区域有多个不同大小的分配,它会变得更“有趣”,但我认为没有一种方法可以(很好地)为此实现 - 至少如果第二次调用请求更大的分配。

在用户模式下这样做的好处是显而易见的:如果您在记帐中犯了错误,内核仍然会在应用程序停止时释放内存。并且在内核模式下为 std::map [或其等价物] 分配内存也将更难处理。

关于c++ - 多个对象的 MMAP 共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com