gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:33:52 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

  1. 如果当前被调出,则批量调入内存范围
  2. 除非在严重的内存压力下操作,否则不要将其调出

mlock可以用来表示“永不交换”,但此时不再是建议;你已经告诉操作系统永远不要将它换掉,即使是在严重的内存压力下(如果太多进程这样做,你可能会触发内存不足错误或广泛的性能下降,因为不太重要的内存被迫以牺牲更重要的内存为代价保持常驻)。

关于c++ - 如何提示操作系统哪些内存块不应交换到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52412161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com