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

C++ 如何提示操作系统哪些内存块不应交换到磁盘?,c++,memory,memory-management,C++,Memory,Memory Management,当系统内存耗尽时,操作系统开始将未使用的内存区域交换到磁盘。我想知道开发人员是否可以控制这个过程 例如,我有两个内存块,它们都有一段时间没有被使用。但我不希望第一个数据块被交换到磁盘,因为应用程序正在等待一些东西,应该尽快处理这个数据块。另一个块没有那么重要,因此毫无疑问可以将其交换到磁盘 可能没有跨平台的方法,但可能有特定于操作系统(Windows、Linux等)的方法或黑客技巧来区分交换的优先级,并“标记”应最后交换的某些内存块?在POSIX系统上,POSIX_MADV_WILLNEED标志

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

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

可能没有跨平台的方法,但可能有特定于操作系统(Windows、Linux等)的方法或黑客技巧来区分交换的优先级,并“标记”应最后交换的某些内存块?

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

  • 内存范围中的页,如果当前已被分页,则以大容量显示
  • 除非在严重的内存压力下运行,否则不要将其分页

  • 可以用来表示“永不交换”,但在那一点上它不再是建议;您已经告诉操作系统,即使在严重的内存压力下,也不要将其调出(如果有太多进程这样做,您可能会触发内存不足错误或广泛的性能下降,因为不太重要的内存将被迫以牺牲更重要的内存为代价保持驻留状态)。

    听起来像是您在寻找的。编辑:对于Windows来说,似乎存在。
    mlock
    需要特殊权限,这样随机用户就不会造成上一段中描述的问题。