If the <ahref="../api_reference/C/envopen.html#envopen_DB_PRIVATE"class="olink">DB_PRIVATE</a> flag is specified to the <ahref="../api_reference/C/envopen.html"class="olink">DB_ENV->open()</a> method,
regions are created in per-process heap memory; that is, memory
returned by <codeclass="literal">malloc</code>(3).
</p>
<p>
If this flag is specified, then you cannot open more than a
single handle for the environment. For example, if
both a server application and Berkeley DB utilities (for
example, the <ahref="../api_reference/C/db_archive.html"class="olink">db_archive</a> utility, the <ahref="../api_reference/C/db_checkpoint.html"class="olink">db_checkpoint</a> utility or the <ahref="../api_reference/C/db_stat.html"class="olink">db_stat</a> utility)
are expected to access the environment, the <ahref="../api_reference/C/envopen.html#envopen_DB_PRIVATE"class="olink">DB_PRIVATE</a> flag
should not be specified because the second attempt to open
the environment will fail.
</p>
</li>
<li>
<p>
If the <ahref="../api_reference/C/envopen.html#envopen_DB_SYSTEM_MEM"class="olink">DB_SYSTEM_MEM</a> flag is specified to <ahref="../api_reference/C/envopen.html"class="olink">DB_ENV->open()</a>, shared
regions are created in system memory rather than files. This is
an alternative mechanism for sharing the Berkeley DB environment
among multiple processes and multiple threads within processes.
</p>
<p>
The system memory used by Berkeley DB is potentially useful past
the lifetime of any particular process. Therefore, additional
cleanup may be necessary after an application fails because
there may be no way for Berkeley DB to ensure that system
resources backing the shared memory regions are returned to the
system.
</p>
<p>
The system memory that is used is architecture-dependent. For
example, on systems supporting X/Open-style shared memory
interfaces, such as UNIX systems, the
<codeclass="literal">shmget</code>(2) and related System V IPC interfaces
are used. Additionally, VxWorks systems use system memory. In
these cases, an initial segment ID must be specified by the
application to ensure that applications do not overwrite each
other's database environments, so that the number of segments
created does not grow without bounds. See the <ahref="../api_reference/C/envset_shm_key.html"class="olink">DB_ENV->set_shm_key()</a>
method for more information.
</p>
<p>
On Windows platforms, the use of the <ahref="../api_reference/C/envopen.html#envopen_DB_SYSTEM_MEM"class="olink">DB_SYSTEM_MEM</a> flag is
problematic because the operating system uses reference counting
to clean up shared objects in the paging file automatically. In
addition, the default access permissions for shared objects are
different from files, which may cause problems when an
environment is accessed by multiple processes running as
different users. See the <ahref="../installation/build_win_notes.html"class="olink">Windows Notes</a> section in the
Berkeley DB Installation and Build Guide for more information.
</p>
</li>
<li>
If no memory-related flags are specified to <ahref="../api_reference/C/envopen.html"class="olink">DB_ENV->open()</a>, memory backed
by the filesystem is used to store the regions. On UNIX systems,
the Berkeley DB library will use the POSIX mmap interface. If mmap
is not available, the UNIX shmget interfaces may be used instead, if
they are available.
</li>
</ol>
</div>
<p>
Any files created in the filesystem to back the regions are created in
the environment home directory specified to the <ahref="../api_reference/C/envopen.html"class="olink">DB_ENV->open()</a> call. These
files are named __db.### (for example, __db.001, __db.002 and so on).
When region files are backed by the filesystem, one file per region is
created. When region files are backed by system memory, a single file
will still be created because there must be a well-known name in the
filesystem so that multiple processes can locate the system shared
memory that is being used by the environment.</p>
<p>Statistics
about the shared memory regions in the environment can be displayed
using the <spanclass="bold"><strong>-e</strong></span> option to the