当前位置:首页 > 内存 > 正文

mmap内存占用

  • 内存
  • 2024-08-13 07:47:35
  • 6499

一、mmap返回说明

当mmap()函数执行成功时,它将返回一个指向映射区域的指针,而munmap()函数将返回0表示操作成功。但是,如果发生故障,mmap()函数将返回一个特殊值(void*)-1,即MAP_FAILED。此时,munmap()函数将返回-1作为错误标识符。


在失败的错误类型中,EACCES表示访问权限错误,可能是由于尝试的访问操作与文件权限不匹配或来自内存而引起的。EAGAIN可能是因为文件已被锁定或系统内存资源不足,导致操作无法完成。EBADF表示传递给mmap()的文件描述符fd无效,无法引用任何文件。


EINVAL表示传递的参数不正确,与函数期望的格式或范围不匹配。当系统达到打开文件数量的限制时,会生成ENFILE错误。ENODEV意味着您尝试使用的文件系统不支持内存映射。这通常发生在不支持此功能的文件系统上。


如果内存不足或者超出进程的最大内存映射限制,munmap()将返回ENOMEM。EPERM表示权限不足,无法进行操作,可能是权限配置不正确。如果在写保护文件上使用MAP_DENYWRITE标志并尝试写入,则会引发ETXTBSY错误。最后,SIGSEGV和SIGBUS都是信号异常,分别表示尝试写入只读区域或尝试访问不属于进程的内存区域。这些是严重的行时错误。


扩展信息

mmap将文件或其他对象映射到内存中。该文件被映射到多个页面。如果文件大小不是所有页面大小的总和,则最后一页上未使用的空间将被删除。