munmap,mmap的功能是什么?

时间:2017-01-05 08:19:23

标签: c++ c linux system-calls

当我尝试研究一些处理FPGA的代码时,我遇到了munmap,mmap。

我查看了here提供的手册。我仍然不理解这个功能的目的。这到底是做什么的?

3 个答案:

答案 0 :(得分:3)

它将一大块磁盘缓存映射到进程空间,以便映射文件可以在字节级别进行操作,而不是要求应用程序使用write()#wrapper{ height: 100%; width: 100%; position: fixed; overflow: hidden; }等等来通过VFS。

答案 1 :(得分:3)

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

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

同样,munmap()删除了映射,因此不再对分配的内存进行进一步访问仍然合法。

这些是较低级别的调用,其行为类似于内存分配器函数(如malloc() / free()在更高级别上提供的调用)。但是,此系统调用允许对分配的区域行为进行细粒度控制,例如

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

如果您认为替代措辞可以帮助您,也可以参考wikipedia article

答案 2 :(得分:1)

手册很清楚:

  

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

简而言之,它将一大块文件/设备内存/任何内容映射到进程空间,以便它可以通过访问内存直接访问内容。

例如:

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

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

如果fd是某些FPGA的器件存储器,那么mem将成为FPGA内容的内容。

在某些情况下使用非常方便,效率很高。