MMFILE - Class for Memory-Mapped Files
ID: Q142377
|
The information in this article applies to:
-
The Microsoft Foundation Classes (MFC), used with:
-
Microsoft Visual C++, 32-bit Editions, versions 2.0, 2.1, 2.2, 4.0
SUMMARY
Memory-mapped files allow a file on disk to be associated with an
address space. Once this mapping is done the data in the file can be
accessed as if the file was in memory. Memory-mapped files provide
a method on Win32 for sharing blocks of memory between processes.
The CMemoryMappedFile class provides a C++ wrapper class for creating
a memory-mapped file and using it. The MMFILE.TXT file included with
code provides more information about how to use the class.
The following files are available for download from the Microsoft
Download Center. Click the file names below to download the files:
Mmfile.exe
For more information about how to download files from the Microsoft
Download Center, please visit the Download Center at the following Web
address
http://www.microsoft.com/downloads/search.asp
and then click How to use the Microsoft Download Center.
MORE INFORMATION
CMemoryMappedFile is derived from CMemFile. It wraps the file mapping
APIs to manage the file mapping. A memory-mapped file does not
necessarily have to be associated with a disk file.
To create a memory-mapped file without an associated disk file, call
CMemoryMappedFile::Open(). The first argument has to be supplied and
it can be any string. This memory-mapped file can be accessed by
other processes by using this string when they open the file. The
other arguments to Open specify the size and protection flags for
this file. The default parameters creates a memory-mapped file with
a size of 4096 bytes and does not map to a disk file.
Mapping a file on disk into memory involves opening the disk file with the
correct access. Then call CMemoryMappedFile::Open() and pass in the handle
to the file. The other parameters specify protection flags for the mapping,
size of the mapping, and the part of the file to map. The default
parameters try to map the complete file into memory.
The code below shows the two ways of creating the memory-mapped file.
REFERENCES
"Advanced Windows" - Jeffrey Richter
Win32 SDK Docs
Sample Code
// Code to open a memory-mapped file
//
CMemoryMappedFile SharedFile1;
// Opens a memory-mapped file without creating a file on disk.
// This or other processes can access the file by using the
// name. Default size is 4096 bytes.
SharedFile1.Open("Test");
...
SharedFile1.Close();
//Open a file on disk and map it into memory
CFile file("DiskFile", CFile::modeReadWrite |
CFile::modeCreate | CFile::shareDenyNone);
CMemoryMappedFile SharedFile2;
SharedFile2.Open("MapFile", (HANDLE) file.m_hFile);
...
SharedFile2.Close();
file.Close();
Additional query words:
4.00 2.00 2.10 2.20 memory mapped
Keywords : kbcode kbfile kbsample kbFileIO kbMFC kbVC
Version : winnt:2.0,2.1,2.2,4.0
Platform : winnt
Issue type :