c - 在 POSIX unix 系统中,是否可以以永远不会换出磁盘以支持其他文件的方式对文件进行 mmap()?

标签 c unix search mmap

如果不使用 mmap(),似乎应该有一种方法可以给某些文件“优先级”,这样它们唯一被换出的时间就是页面错误试图带来在,例如,执行代码,或被某些进程malloc()调用的内存,而不是其他文件。人们可以想到这可能有用的情况。考虑搜索引擎,它应该将索引文件保存在缓存中,但可能同时写入新文件(不用于搜索)。

最佳答案

有几种方法。

最好的方法是使用 madvise(),它允许您通知内核您很快将需要一个特定范围的内存,从而使其优先于其他内存。你也可以用它来表示某个特定范围很快就不需要了,所以应该尽快换掉它。

hack 方法是使用 mlock(),它强制将一定范围的内存保留在 RAM 中。这通常不是一个好主意,只应在特殊情况下使用。最常见的情况是将密码存储在 RAM 中,以便在计算机断电后无法从交换文件中恢复密码。除非我用尽了其他选项,否则我不会使用 mlock() 进行性能调整。

最糟糕的方法是不断戳记,强制它保持新鲜。

关于c - 在 POSIX unix 系统中,是否可以以永远不会换出磁盘以支持其他文件的方式对文件进行 mmap()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23708274/

相关文章:

c - 可变参数函数调用如何工作

c - SSL_CTX_new 中的段错误

mysql - Windows 中是否有任何 er 图表工具可用于连接到 Unix 中的 MySQL 4.1 数据库?

java - 如何从java中的文件夹目录中获取png图像名称、路径、高度和宽度?

javascript - 搜索文件夹结构

c - strtok字符串溢出问题

objective-c - 如何以编程方式访问剪贴板数据?

c - 如何在 C (unix) 中读取 mp3 文件标签?

regex - 如何使用 bash 脚本和 sed 将字符串替换为换行符?

c++ - 对 vector 进行二进制排序