如何在保留虚拟地址范围的同时释放内存?

时间:2018-04-11 21:22:36

标签: c linux memory-management mmap

我正在处理内存大小非常紧张且虚拟地址空间受限的设备。

我试图通过更频繁地回收内存来解决这个问题,而不是频繁地回收虚拟地址,例如尽早保留虚拟地址,但提交内存较晚,同时提前回收内存并延迟发布虚拟地址。

特别是有一个非常大的分配受到地址空间碎片的影响很大,我试图通过预先为它预留地址空间来解决它。

This question解决了第一个问题:使用libs: /shared/dev/libs/ffmpeg/3.4.2/lib/darwin-amd64/libswresample.dylibmmap获取虚拟地址范围,并在使用前使用PROT_NONEmprotect,然后使用页面使用时会出现故障。

但是,我无法找到相反的方法:PROT_READ|PROT_WRITEmprotect似乎没有释放页面,而调用PROT_NONE则失去了虚拟地址范围。

是否在保留虚拟地址的同时取消映射/分离页面?

1 个答案:

答案 0 :(得分:0)

mmapMAP_FIXED将替换指定地址范围内的所有现有映射,并在不再引用该内存时释放其内存。

相关问题