Shared Memory
In the Win32 API, shared memory is implemented by file mapping. All memory
allocated by the other allocation methods (the
GlobalAlloc,
LocalAlloc,
HeapAlloc, or
VirtualAlloc function) is accessible only to the calling process. Memory allocated by a
DLL, however, is in the address space of the process that called the DLL and is
not accessible to other processes using the same DLL.
Named file mapping provides an easy way to create a block of shared memory. A
process can specify a name when it uses the
CreateFileMapping function to create a file-mapping object. Other processes can specify the
same name to either the
CreateFileMapping or
OpenFileMapping function to obtain a handle of the mapping object. The names of event
objects, semaphore objects, mutex objects, and file-mapping objects share the same
name space. If a specified name matches the name of an existing object of a
different type, an error occurs. When creating named objects, try to use unique names
and check the function return values for duplicate name errors.
Each process specifies its handle of the file-mapping object in the
MapViewOfFile function to map a view of the file into its own address space. The views of
all processes for a single file-mapping object are mapped into the same sharable
pages of physical storage. However, the virtual addresses of the mapped views
can vary from one process to another, unless the
MapViewOfFileEx function is used to map the view at a specified address. Although sharable,
the pages of physical storage used for a mapped file view are not global; they
are not accessible to processes that have not mapped a view of the file.
A file-mapping object is associated with a disk file that the system uses when
the mapped view is swapped out of physical memory and onto the disk. This disk
swap file can be the system's paging file, or it can be some other file that
was specified when the file-mapping object was created. In that case, the memory
is initialized along with the contents of the file. Mapping a specified file
in the file system is useful for processes that need to share the data in an
existing file or that want to use the file to save data generated by the sharing
processes. If you map a specified file, you should open it for exclusive access
and keep the handle open until you are finished with the shared memory. Keeping
it open will prevent other processes from opening another handle on the file
to use
ReadFile or
WriteFile or from creating additional mapping objects for the same file, any of which
actions can lead to unpredictable results.
Any pages committed by mapping a view of a file are released when the last
process with a view of the mapping object either terminates or unmaps its view by
calling the
UnmapViewOfFile function. At this time, the specified file (if any) associated with the
mapping object is updated. A specified file can also be forced to update by calling
the
FlushViewOfFile function.
For more information about file mapping, see
File Mapping. For an example of shared memory in a DLL, see
Dynamic-Link Libraries.
If multiple processes have write access to shared memory, access to the memory
should be synchronized. For more information about interprocess
synchronization, see
Synchronization.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database