Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ mmap的功能是什么_C++_C_Linux_System Calls - Fatal编程技术网

C++ mmap的功能是什么

C++ mmap的功能是什么,c++,c,linux,system-calls,C++,C,Linux,System Calls,当我试图研究一些处理FPGA的代码时,我遇到了munmap,mmap 我仔细阅读了提供的手册。我仍然不明白这个功能的目的。这到底是做什么的?它将一块磁盘缓存映射到进程空间,以便可以在字节级别操作映射的文件,而不需要应用程序通过VFS执行read(),write(),等等。mmap()是一个系统调用,有助于内存映射的I/O操作。它分配一个内存区域并将其映射到调用进程虚拟地址空间,以便应用程序能够访问内存 mmap()返回指向可用于访问内存的映射区域的指针 类似地,munmap()会删除映射,因此不

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


我仔细阅读了提供的手册。我仍然不明白这个功能的目的。这到底是做什么的?

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

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

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

类似地,
munmap()
会删除映射,因此不再合法地访问分配的内存

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

  • 映射的内存保护(读、写、执行权限)
  • 映射的(近似)位置(请参见
    MAP\u FIXED
    flag)
  • 映射区域的初始内容(请参见
    MAP\u UNINITIALIZED
    标志)
等等

如果您认为其他措辞对您有帮助,您也可以参考。

手册很清楚:

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

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

例如:

fd = open("xxx", O_RDONLY);
mem = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
将文件内容映射到
mem
,读取
mem
就像读取文件的内容
xxx

如果
fd
是某个FPGA的设备内存,则
mem
成为FPGA内容的内容


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

我建议阅读这个问题的最佳答案:。除非它是
MAP\u ANONYMOUS
,在这种情况下没有文件:)