Hea*_*avy 3 c++ memory memory-management
当系统内存耗尽时,OS开始将未使用的内存区域交换到磁盘.我想知道开发人员是否可以控制这个过程.
例如,我有2块内存,两者都没有使用一段时间.但是我不希望第一个块被交换到磁盘,因为应用程序正在等待某些东西,并且应该尽快处理这个块.另一个块并不重要,所以它可以毫无疑问地交换到磁盘.
可能没有跨平台的方式,但也许有特定于操作系统(Windows,Linux等)的方法或hacky技巧来优先交换和"标记"应该最后交换的某些内存块?
在POSIX系统上,posix_madvise带有POSIX_MADV_WILLNEED标志提供了这种建议.这是唯一的建议,所以它取决于操作系统如何解释它,但根据我的经验,它通常表现为:
mlock可以用来说"永不交换",但在那时它不再是建议; 你已经告诉操作系统永远不要把它换掉,即使在严重的内存压力下(如果有太多的进程这样做,你可以触发内存不足错误或广泛的性能下降,因为不太重要的内存被迫保持驻留而代价是更多重要的记忆).