当系统内存用尽时,OS开始将未使用的内存区域交换到磁盘。我想知道开发人员是否可以控制此过程。
例如,我有2个内存块,两个内存块都没有使用一段时间了。但是我不希望将第一个块交换到磁盘上,因为应用程序正在等待某些东西,因此应该尽快处理该块。另一个块并不那么重要,因此可以毫无疑问地将其交换到磁盘上。
可能没有跨平台的方式,但是也许有特定于操作系统(Windows,Linux等)的方式或骇人听闻的技巧来优先考虑交换并“标记”应最后交换的某些内存块?
答案 0 :(得分:5)
在POSIX系统上,带有POSIX_MADV_WILLNEED
标志的posix_madvise
提供了这种建议。这只是建议,因此取决于操作系统如何解释它,但以我的经验,它通常表现为:
mlock
可以用来表示“永不交换”,但现在不再是建议。您已经告诉操作系统,即使在严重的内存压力下,也要永远将其交换出去(如果这样做的进程过多,则可能会触发内存不足错误或广泛的性能下降,因为不太重要的内存被迫执行保持居所,但要牺牲更重要的记忆)。