POSIX_MADVISE - Linux手册页

时间:2019-08-20 18:00:59  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

posix_madvise-提供有关内存使用模式的建议

语法

#include <sys/mman.h>

int posix_madvise(void *addr, size_t len, int advice);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

posix_madvise():

_POSIX_C_SOURCE>= 200112L

说明

posix_madvise()函数使应用程序可以在地址范围(从addr开始并持续len个字节)中向系统建议有关内存使用的预期模式。系统可以自由使用此建议以提高内存访问的性能(或完全忽略建议),但是调用posix_madvise()不会影响指定范围内的内存访问语义。

建议参数为以下之一:

POSIX_MADV_NORMAL
该应用程序对于指定地址范围的内存使用模式没有特殊建议。这是默认行为。
POSIX_MADV_SEQUENTIAL
应用程序期望从低地址到高地址依次访问指定的地址范围。因此,该区域中的页面可以被提前读取,并且可以在访问后立即释放。
POSIX_MADV_RANDOM
该应用程序希望随机访问指定的地址范围。因此,预读可能没有通常的有用。
POSIX_MADV_WILLNEED
该应用程序希望在不久的将来访问指定的地址范围。因此,预先阅读可能是有益的。
POSIX_MADV_DONTNEED
该应用程序希望它在不久的将来不会访问指定的地址范围。

返回值

成功时,posix_madvise()返回0。失败时,返回正错误号。

错误说明

EINVAL
addr不是系统页面大小的倍数,或者len是负数。
EINVAL
建议无效。
ENOMEM
指定范围内的地址部分或完全超出了呼叫者的地址空间。

版本

posix_madvise()的支持最早出现在glibc 2.2版中。

遵循规范

POSIX.1-2001。

备注

如果len为0,则POSIX.1允许实现生成错误。在Linux上,允许将len指定为0(作为成功的无操作)。

在glibc中,此功能是使用madvise(2)实现的。但是,从glibc 2.6开始,POSIX_MADV_DONTNEED被视为无操作,因为对应的madvise(2)值MADV_DONTNEED具有破坏性的语义。

另外参见

madvise(2),posix_fadvise(2)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/