munmap,mmap的function是什么?
当我尝试研究一些处理FPGA的代码时,我遇到了munmap,mmap。
我浏览了这里提供的手册。 我仍然不理解这个function的目的。 究竟是什么呢?
手册很清楚:
mmap()在调用进程的虚拟地址空间中创建一个新映射
简而言之,它将一大块文件/设备内存/任何内容映射到进程空间,以便它可以通过访问内存直接访问内容。
例如:
fd = open("xxx", O_RDONLY); mem = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
将文件的内容映射到mem
,读取mem
就像读取文件xxx
的内容一样。
如果fd
是某些FPGA的器件存储器,则mem
成为FPGA内容的内容。
在某些情况下使用非常方便,效率很高。
它将一大块磁盘缓存映射到进程空间,以便映射文件可以在字节级别进行操作,而不是要求应用程序通过read()
, write()
等进行VFS。
mmap()
是一个系统调用,它有助于内存映射的I / O操作。 它分配一个内存区域并将其映射到调用进程虚拟地址空间,以便使应用程序能够访问内存。
mmap()
返回指向映射区域的指针,该区域可用于访问内存。
类似地, munmap()
删除映射,因此不再对分配的内存进行进一步访问仍然合法。
这些是较低级别的调用,行为类似于内存分配器函数(如更高级别的malloc()
/ free()
所提供的调用free()
。 但是,此系统调用允许对分配的区域行为进行细粒度控制,例如,
- 映射的内存保护(读,写,执行权限)
- ( 近似 )映射的位置(请参阅
MAP_FIXED
标志) - 映射区域的初始内容(请参阅
MAP_UNINITIALIZED
标志)
等等
如果您认为替代措辞可以帮助您,您还可以参考维基百科文章 。