我在旧笔记本电脑上运行。我总共512Mo只有128Mo ram。没钱买更多的公羊。
我使用mmap
来帮助我规避这个问题并且效果很好。
C代码。
Debian 64位。
除了我所有的努力,我的内存很快就知道了,而且我想知道我是否可以释放我读过的mmaped区域以释放我的ram。
我认为madvise
可以提供帮助,尤其是选项MADV_SEQUENTIAL
。
但我不太了解全貌。
在读取区域后能够释放mmaped已分配的内存,这样它就不会用大文件填充我的整个ram。我不会很快读到它,所以对我来说是垃圾。将它保留在ram中毫无意义。
更新:我没有完成该文件,因此不想致电munmap
。我有其他的东西与它有关,但在其他地区。随机读取。
答案 0 :(得分:2)
对于mmap()
ed文件的随机读/写访问权限,MADV_SEQUENTIAL
可能不是很有用(实际上可能会导致意外行为)。在这种情况下,MADV_RANDOM
或MADV_DONTNEED
会是更好的选择。但是,请注意内核可以自由地忽略任何madvise()
- 虽然在我的理解中,Linux目前没有,因为它倾向于将madvise()
更多地视为命令而非咨询......
另一个选项是mmap()
根据需要只选择文件的选定部分,并munmap()
当你完成它们时,可能会保留一些当前活动的少量数据库映射(即,如果需要,一次映射多个区域,但仍然限制它)。
答案 1 :(得分:0)
当然,当你完成这些资源时,你必须释放资源,以免泄漏资源,从而过早耗尽可用空间。
不确定问题是什么,如果您知道mmap()
,那么你肯定也知道munmap()
吗?它就在同一个手册页上。