当我尝试学习与FPGA有关的一些代码时,我遇到了munmap和mmap。
我查阅了这里提供的手册。但是我仍然不理解这个函数的目的。它到底是做什么用的?
我查阅了这里提供的手册。但是我仍然不理解这个函数的目的。它到底是做什么用的?
mmap()
是一个系统调用,有助于内存映射I/O操作。它分配了一个内存区域并将其映射到调用进程的虚拟地址空间中,使应用程序能够访问内存。
mmap()
返回指向映射区域的指针,可用于访问内存。
类似地,munmap()
删除映射,因此无法再访问已分配的内存。
这些是低级调用,行为类似于内存分配器函数(如malloc()
/ free()
)在更高级别上提供的内容。然而,这个系统调用可以让人们精细地控制分配区域的行为,例如
MAP_FIXED
标志)MAP_UNINITIALIZED
标志)等等。
如果您认为替代措辞会有帮助,也可以参考维基百科文章。
read()
、write()
等接口去访问VFS。MAP_ANONYMOUS
,否则就有文件 :) - hobbs手册很清晰:
mmap()在调用进程的虚拟地址空间中创建新的映射。
简单来说,它将文件/设备内存块/任何东西映射到进程空间中,以便可以通过直接访问内存来访问内容。
例如:
fd = open("xxx", O_RDONLY);
mem = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
将文件的内容映射到mem
,读取mem
就像读取文件xxx
的内容。
如果fd
是某个FPGA设备的内存,则mem
变成了FPGA内容的一部分。
在某些情况下非常方便和高效。