gpt4 book ai didi

c++ - 多次调用 madvise

转载 作者:太空狗 更新时间:2023-10-29 12:02:10 26 4
gpt4 key购买 nike

我正在阅读 madvise 的文档Linux 系统调用。我试图找出将多个“建议”值传递给 madvise 的最佳方法。 advice 参数似乎没有采用可以或运算在一起的位标志,因此似乎只能用一个 advice 调用 madvise一个参数。

如果我想利用多个 advice 参数,根据我的应用程序的用例,连续多次简单地调用 madvise 是否可以接受?

例如,如果我想通过 MADV_WILLNEED 提示内核提前开始读取 mmap 文件,但我知道我的应用程序将主要使用顺序读取,我也可以利用MADV_SEQUENTIAL。我在网上找不到任何示例来演示如何将多个值传递给 madvise,所以我假设我只是说:

int result = madvise(address, m_size, MADV_WILLNEED);
/* do error checking */

result = madvise(address, size, MADV_SEQUENTAL);
/* do error checking */

但我很犹豫,因为我不知道这是否会以某种方式“覆盖”之前的调用。那么是否可以像这样为 madvise 提供多个 advice 参数?

最佳答案

每次调用都会触发一种策略来处理您映射的数据部分——您不能为同一部分组合多种策略,因为它们本质上是相互冲突的。

但是您可以对文件的不同部分应用不同的策略,这就是为什么您需要地址和大小参数。

对文件同一部分的后续调用将重置先前的策略。

如果您的访问是顺序的,您应该使用 MADV_SEQUENTAL —— 它应该进行预读,然后在您访问页面后丢弃它们,从而为您提供最佳性能和内存管理。

WILLNEED 应用于您不希望操作系统在您访问后丢弃页面的情况——如果您有索引 block 或其他访问模式不易确定的情况,则应使用此或 RANDOM .

关于c++ - 多次调用 madvise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31214346/

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