如何提示操作系统哪些内存块不应该交换到磁盘?

时间:2018-09-19 18:31:05

标签: c++ memory memory-management

当系统内存用尽时,OS开始将未使用的内存区域交换到磁盘。我想知道开发人员是否可以控制此过程。

例如,我有2个内存块,两个内存块都没有使用一段时间了。但是我不希望将第一个块交换到磁盘上,因为应用程序正在等待某些东西,因此应该尽快处理该块。另一个块并不那么重要,因此可以毫无疑问地将其交换到磁盘上。

可能没有跨平台的方式,但是也许有特定于操作系统(Windows,Linux等)的方式或骇人听闻的技巧来优先考虑交换并“标记”应最后交换的某些内存块?

1 个答案:

答案 0 :(得分:5)

在POSIX系统上,带有POSIX_MADV_WILLNEED标志的posix_madvise提供了这种建议。这只是建议,因此取决于操作系统如何解释它,但以我的经验,它通常表现为:

  1. 如果当前已被页面调出,则在内存范围内批量页面
  2. 除非在严重的内存压力下运行,否则不要将其分页

mlock可以用来表示“永不交换”,但现在不再是建议。您已经告诉操作系统,即使在严重的内存压力下,也要永远将其交换出去(如果这样做的进程过多,则可能会触发内存不足错误或广泛的性能下降,因为不太重要的内存被迫执行保持居所,但要牺牲更重要的记忆)。