我在某处读到,当常规 c/c++ 应用程序需要访问文件时,通常将文件的内容放入进程内存中,并使用内存操作读取或修改它。这称为内存映射或仅映射文件。
这是否意味着我需要复制(片上)缓冲区中的数据,并根据需要修改内容,然后将其写回到文件中?有具体的功能可以实现这个功能吗?
有人可以向我指出详细描述此内容的链接吗?问题是单词内存映射太宽泛,我无法找到确切的信息。
我正在使用 windows-7、Visual Studio 2010
最佳答案
不需要从文件复制数据。内存映射文件意味着,您用来“打开”文件的函数会为您提供一个包含该文件内容的缓冲区。该缓冲区不是复制文件内容的 RAM 内存,而是一个虚拟内存,其访问直接映射到磁盘上的文件。我不知道它在 Windows 中是如何工作的,但这就是 mmap() 调用在 Linux 中的作用。当您修改该缓冲区并关闭文件时,磁盘上的内容会自动更新。
关于c - C 编程中的映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757435/