munmap和mmap的功能是什么?

4
当我尝试学习与FPGA有关的一些代码时,我遇到了munmap和mmap。
我查阅了这里提供的手册。但是我仍然不理解这个函数的目的。它到底是做什么用的?

2
我建议阅读这个问题的好答案:https://dev59.com/4HVC5IYBdhLWcg3wixw0。 - bruceg
3个回答

6

mmap()是一个系统调用,有助于内存映射I/O操作。它分配了一个内存区域并将其映射到调用进程的虚拟地址空间中,使应用程序能够访问内存。

mmap()返回指向映射区域的指针,可用于访问内存。

类似地,munmap()删除映射,因此无法再访问已分配的内存。

这些是低级调用,行为类似于内存分配器函数(如malloc() / free())在更高级别上提供的内容。然而,这个系统调用可以让人们精细地控制分配区域的行为,例如

  • 映射的内存保护(读、写、执行权限)
  • 映射的(近似)位置(参见MAP_FIXED标志)
  • 映射区域的初始内容(参见MAP_UNINITIALIZED标志)

等等。

如果您认为替代措辞会有帮助,也可以参考维基百科文章


3
它将磁盘缓存的一块映射到进程空间,使得映射的文件可以以字节级别进行操作,而不需要应用程序通过read()write()等接口去访问VFS。

2
除非是 MAP_ANONYMOUS,否则就有文件 :) - hobbs

2

手册很清晰:

mmap()在调用进程的虚拟地址空间中创建新的映射。

简单来说,它将文件/设备内存块/任何东西映射到进程空间中,以便可以通过直接访问内存来访问内容。

例如:

fd = open("xxx", O_RDONLY);
mem = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);

将文件的内容映射到mem,读取mem就像读取文件xxx的内容。

如果fd是某个FPGA设备的内存,则mem变成了FPGA内容的一部分。

在某些情况下非常方便和高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接