Attic/kduma/docs/files/kduma-c.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>C:\projects\duma\kduma\kduma.c</title>
<link rel="stylesheet" type="text/css" href="../styles/main.css" />
<script language="JavaScript" src="../javascript/main.js"></script>
</head>
<body class="UnframedPage" onLoad="NDOnLoad()">
<script language="JavaScript">
<!--
if (browserType) {
document.write("<div class=" + browserType + ">");
if (browserVer) {
document.write("<div class=" + browserVer + ">");
}
} // -->
</script>
<!-- Generated by Natural Docs, version 1.35 -->
<!-- http://www.naturaldocs.org -->
<!-- saved from url=(0026)http://www.naturaldocs.org -->
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="MenuSection" valign="top">
<!--START_ND_MENU-->
<div class="MEntry">
<div class="MFile"><a href="README-txt.html">00README</a></div>
</div>
<div class="MEntry">
<div class="MFile">
<a href="duma_config-h.html">duma_config.h</a>
</div>
</div>
<div class="MEntry">
<div class="MFile" id="MSelected">kduma.c</div>
</div>
<div class="MEntry">
<div class="MFile"><a href="kduma-h.html">kduma.h</a></div>
</div>
<div class="MEntry">
<div class="MFile"><a href="log-h.html">log.h</a></div>
</div>
<div class="MEntry">
<div class="MFile"><a href="paging-h.html">paging.h</a></div>
</div>
<div class="MEntry">
<div class="MGroup">
<a href="javascript:ToggleMenu('MGroupContent1')">Index</a>
<div class="MGroupContent" id="MGroupContent1">
<div class="MEntry">
<div class="MIndex">
<a href="../index/General.html">Everything</a>
</div>
</div>
<div class="MEntry">
<div class="MIndex">
<a href="../index/Classes.html">Classes</a>
</div>
</div>
<div class="MEntry">
<div class="MIndex">
<a href="../index/Files.html">Files</a>
</div>
</div>
<div class="MEntry">
<div class="MIndex">
<a href="../index/Functions.html">Functions</a>
</div>
</div>
<div class="MEntry">
<div class="MIndex">
<a href="../index/Types.html">Types</a>
</div>
</div>
<div class="MEntry">
<div class="MIndex">
<a href="../index/Variables.html">Variables</a>
</div>
</div>
</div>
</div>
</div>
<!--END_ND_MENU-->
</td>
<td class="ContentSection" valign="top">
<div class="CFile" id="MainTopic">
<div class="CTopic">
<h1 class="CTitle"><a name="kduma.c"></a>kduma.c</h1>
<div class="CBody">
<!--START_ND_SUMMARY-->
<div class="Summary">
<div class="STitle">Summary</div>
<div class="SBorder">
<table
border="0"
cellspacing="0"
cellpadding="0"
class="STable"
>
<tr>
<td class="SEntrySize">
<div class="SMain">
<div class="SEntry">
<a href="#kduma.c">kduma.c</a>
</div>
</div>
</td>
<td class="SDescriptionSize">
<div class="SMain">
<div class="SDescription"></div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SGroup">
<div class="SEntry">
<a href="#Variables">Variables</a>
</div>
</div>
</td>
<td>
<div class="SGroup">
<div class="SDescription"></div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#version"
id="link1"
onMouseOver="ShowTip(event, 'tt1', 'link1')"
onMouseOut="HideTip('tt1')"
>version</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">KDUMA version string</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a href="#MEMORY_CREATION_SIZE"
>MEMORY_CREATION_SIZE</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
MEMORY_CREATION_SIZE is the amount of memory to
get from the operating system at one time.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SGroup">
<div class="SEntry">
<a href="#Enumerations">Enumerations</a>
</div>
</div>
</td>
<td>
<div class="SGroup">
<div class="SDescription"></div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SEnumeration">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_SlotState">_DUMA_SlotState</a>
</div>
</div>
</div>
</td>
<td>
<div class="SEnumeration">
<div class="SDescription">
<div class="SIndent1">
State of slot values (empty, free, etc)
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SEnumeration">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_Slot_FileSource"
>_DUMA_Slot_FileSource</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SEnumeration">
<div class="SDescription">
<div class="SIndent1">
Where did we get file info
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SEnumeration">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_InitState">_DUMA_InitState</a>
</div>
</div>
</div>
</td>
<td>
<div class="SEnumeration">
<div class="SDescription">
<div class="SIndent1">
Whats are initialization start
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SEnumeration">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_MemRegion">_DUMA_MemRegion</a>
</div>
</div>
</div>
</td>
<td>
<div class="SEnumeration">
<div class="SDescription">
<div class="SIndent1">Memory region of slot.</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SClass">
<div class="SEntry">
<a href="#_DUMA_Slot">_DUMA_Slot</a>
</div>
</div>
</td>
<td>
<div class="SClass">
<div class="SDescription">
Struct Slot contains all of the information about
a malloc buffer except for the contents of its
memory.
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SGroup">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_Slot.Variables">Variables</a>
</div>
</div>
</div>
</td>
<td>
<div class="SGroup">
<div class="SDescription">
<div class="SIndent1"></div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_ALIGNMENT"
id="link2"
onMouseOver="ShowTip(event, 'tt2', 'link2')"
onMouseOut="HideTip('tt2')"
>DUMA_ALIGNMENT</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_ALIGNMENT is a global variable used to
control the default alignment of buffers
returned by malloc(), calloc(), and realloc().
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_PROTECT_BELOW"
id="link3"
onMouseOver="ShowTip(event, 'tt3', 'link3')"
onMouseOut="HideTip('tt3')"
>DUMA_PROTECT_BELOW</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_PROTECT_BELOW is used to modify the
behavior of the allocator.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_FILL"
id="link4"
onMouseOver="ShowTip(event, 'tt4', 'link4')"
onMouseOut="HideTip('tt4')"
>DUMA_FILL</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_FILL is set to 0-255 if DUMA should fill
all new allocated memory with the specified
value.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_SLACKFILL"
id="link5"
onMouseOver="ShowTip(event, 'tt5', 'link5')"
onMouseOut="HideTip('tt5')"
>DUMA_SLACKFILL</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_SLACKFILL is set to 0-255.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_PROTECT_FREE"
id="link6"
onMouseOver="ShowTip(event, 'tt6', 'link6')"
onMouseOut="HideTip('tt6')"
>DUMA_PROTECT_FREE</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_PROTECT_FREE is used to control the
disposition of memory that is released using
free().
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_MAX_ALLOC"
id="link7"
onMouseOver="ShowTip(event, 'tt7', 'link7')"
onMouseOut="HideTip('tt7')"
>DUMA_MAX_ALLOC</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_MAX_ALLOC is used to control the maximum
memory print of the program in total: When the
sum of allocated and protected memory would
exceed this value in kB, the protected memory is
freed/deleted.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_ALLOW_MALLOC_0"
id="link8"
onMouseOver="ShowTip(event, 'tt8', 'link8')"
onMouseOut="HideTip('tt8')"
>DUMA_ALLOW_MALLOC_0</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_ALLOW_MALLOC_0 is set if DUMA is to allow
malloc(0).
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_MALLOC_FAILEXIT"
id="link9"
onMouseOver="ShowTip(event, 'tt9', 'link9')"
onMouseOut="HideTip('tt9')"
>DUMA_MALLOC_FAILEXIT</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_MALLOC_FAILEXIT controls the behaviour of
DUMA when malloc() fails and would return NULL.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_FREE_ACCESS"
id="link10"
onMouseOver="ShowTip(event, 'tt10', 'link10')"
onMouseOut="HideTip('tt10')"
>DUMA_FREE_ACCESS</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_FREE_ACCESS is set if DUMA is to write
access memory before freeing it.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.DUMA_SHOW_ALLOC"
id="link11"
onMouseOver="ShowTip(event, 'tt11', 'link11')"
onMouseOut="HideTip('tt11')"
>DUMA_SHOW_ALLOC</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
DUMA_SHOW_ALLOC is set if DUMA is to print all
allocations and deallocations to the console.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_allocList"
id="link12"
onMouseOver="ShowTip(event, 'tt12', 'link12')"
onMouseOut="HideTip('tt12')"
>_duma_allocList</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
_DUMA_allocList points to the array of slot
structures used to manage the malloc arena.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_allocListSize"
id="link13"
onMouseOver="ShowTip(event, 'tt13', 'link13')"
onMouseOut="HideTip('tt13')"
>_duma_allocListSize</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
_duma_allocListSize is the size of the
allocation list.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.slotCount"
id="link14"
onMouseOver="ShowTip(event, 'tt14', 'link14')"
onMouseOut="HideTip('tt14')"
>slotCount</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
slotCount is the number of Slot structures in
allocationList.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.unUsedSlots"
id="link15"
onMouseOver="ShowTip(event, 'tt15', 'link15')"
onMouseOut="HideTip('tt15')"
>unUsedSlots</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
unUsedSlots is the number of Slot structures
that are currently available to represent new
malloc buffers.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.slotsPerPage"
id="link16"
onMouseOver="ShowTip(event, 'tt16', 'link16')"
onMouseOut="HideTip('tt16')"
>slotsPerPage</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
slotsPerPage is the number of slot structures
that fit in a virtual memory page.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.sumAllocatedMem"
id="link17"
onMouseOver="ShowTip(event, 'tt17', 'link17')"
onMouseOut="HideTip('tt17')"
>sumAllocatedMem</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
internal variable: sum of allocated -freed
+protected memory in kB
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.sumTotalAllocatedMem"
id="link18"
onMouseOver="ShowTip(event, 'tt18', 'link18')"
onMouseOut="HideTip('tt18')"
>sumTotalAllocatedMem</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
internal variable: sum of allocated memory in kB
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.sumProtectedMem"
id="link19"
onMouseOver="ShowTip(event, 'tt19', 'link19')"
onMouseOut="HideTip('tt19')"
>sumProtectedMem</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
internal variable: sum of protected memory in kB
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.numDeallocs"
id="link20"
onMouseOver="ShowTip(event, 'tt20', 'link20')"
onMouseOut="HideTip('tt20')"
>numDeallocs</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
internal variable: number of deallocations
processed so far
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.numAllocs"
id="link21"
onMouseOver="ShowTip(event, 'tt21', 'link21')"
onMouseOut="HideTip('tt21')"
>numAllocs</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
internal variable: number of allocations
processed so far
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent2">
<a href="#_DUMA_Slot.duma_init_done"
>duma_init_done</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent2">
internal variable: state of initialization
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SGroup">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_Slot.Functions">Functions</a>
</div>
</div>
</div>
</td>
<td>
<div class="SGroup">
<div class="SDescription">
<div class="SIndent1"></div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_assert"
id="link22"
onMouseOver="ShowTip(event, 'tt22', 'link22')"
onMouseOut="HideTip('tt22')"
>_duma_assert</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">
Print message and halt program execution in
crazy way.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.duma_init"
id="link23"
onMouseOver="ShowTip(event, 'tt23', 'link23')"
onMouseOut="HideTip('tt23')"
>duma_init</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">
duma_init sets configuration settings.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_init"
id="link24"
onMouseOver="ShowTip(event, 'tt24', 'link24')"
onMouseOut="HideTip('tt24')"
>_duma_init</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">
_duma_init sets up the memory allocation arena
and the run-time configuration information.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot.allocateMoreSlots"
id="link25"
onMouseOver="ShowTip(event, 'tt25', 'link25')"
onMouseOut="HideTip('tt25')"
>allocateMoreSlots</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">
allocateMoreSlots is called when there are only
enough slot structures left to support the
allocation of a single malloc buffer.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_allocate"
id="link26"
onMouseOver="ShowTip(event, 'tt26', 'link26')"
onMouseOut="HideTip('tt26')"
>_duma_allocate</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">
This is the memory allocator.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_deallocate"
id="link27"
onMouseOver="ShowTip(event, 'tt27', 'link27')"
onMouseOut="HideTip('tt27')"
>_duma_deallocate</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">
Deallocate allocated memory after running some
checks, then open slot for use.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent2">
<a
href="#_DUMA_Slot._duma_kmalloc"
id="link28"
onMouseOver="ShowTip(event, 'tt28', 'link28')"
onMouseOut="HideTip('tt28')"
>_duma_kmalloc</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent2">A version of kmalloc.</div>
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
<!--END_ND_SUMMARY-->
</div>
</div>
</div>
<div class="CGroup">
<div class="CTopic">
<h3 class="CTitle"><a name="Variables"></a>Variables</h3>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle"><a name="version"></a>version</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static const char version[]</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">KDUMA version string</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="MEMORY_CREATION_SIZE"></a>MEMORY_CREATION_SIZE
</h3>
<div class="CBody">
<p class="CParagraph">
MEMORY_CREATION_SIZE is the amount of memory to get from the
operating system at one time. We’ll break that
memory down into smaller pieces for malloc buffers. One
megabyte is probably a good value.
</p>
</div>
</div>
</div>
<div class="CGroup">
<div class="CTopic">
<h3 class="CTitle"><a name="Enumerations"></a>Enumerations</h3>
</div>
</div>
<div class="CEnumeration">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_SlotState"></a>_DUMA_SlotState
</h3>
<div class="CBody">
<p class="CParagraph">
State of slot values (empty, free, etc)
</p>
</div>
</div>
</div>
<div class="CEnumeration">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot_FileSource"></a>_DUMA_Slot_FileSource
</h3>
<div class="CBody">
<p class="CParagraph">Where did we get file info</p>
</div>
</div>
</div>
<div class="CEnumeration">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_InitState"></a>_DUMA_InitState
</h3>
<div class="CBody">
<p class="CParagraph">Whats are initialization start</p>
</div>
</div>
</div>
<div class="CEnumeration">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_MemRegion"></a>_DUMA_MemRegion
</h3>
<div class="CBody">
<p class="CParagraph">
Memory region of slot. Really we should only hang onto
NORMAL memory. DMA should be released fast.
</p>
</div>
</div>
</div>
<div class="CClass">
<div class="CTopic">
<h2 class="CTitle"><a name="_DUMA_Slot"></a>_DUMA_Slot</h2>
<div class="CBody">
<p class="CParagraph">
Struct Slot contains all of the information about a malloc
buffer except for the contents of its memory.
</p>
<!--START_ND_SUMMARY-->
<div class="Summary">
<div class="STitle">Summary</div>
<div class="SBorder">
<table
border="0"
cellspacing="0"
cellpadding="0"
class="STable"
>
<tr>
<td class="SEntrySize">
<div class="SGroup">
<div class="SEntry">
<a href="#_DUMA_Slot.Variables">Variables</a>
</div>
</div>
</td>
<td class="SDescriptionSize">
<div class="SGroup">
<div class="SDescription"></div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_ALIGNMENT"
id="link29"
onMouseOver="ShowTip(event, 'tt2', 'link29')"
onMouseOut="HideTip('tt2')"
>DUMA_ALIGNMENT</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_ALIGNMENT is a global variable used to
control the default alignment of buffers
returned by malloc(), calloc(), and realloc().
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_PROTECT_BELOW"
id="link30"
onMouseOver="ShowTip(event, 'tt3', 'link30')"
onMouseOut="HideTip('tt3')"
>DUMA_PROTECT_BELOW</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_PROTECT_BELOW is used to modify the
behavior of the allocator.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_FILL"
id="link31"
onMouseOver="ShowTip(event, 'tt4', 'link31')"
onMouseOut="HideTip('tt4')"
>DUMA_FILL</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_FILL is set to 0-255 if DUMA should fill
all new allocated memory with the specified
value.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_SLACKFILL"
id="link32"
onMouseOver="ShowTip(event, 'tt5', 'link32')"
onMouseOut="HideTip('tt5')"
>DUMA_SLACKFILL</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_SLACKFILL is set to 0-255.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_PROTECT_FREE"
id="link33"
onMouseOver="ShowTip(event, 'tt6', 'link33')"
onMouseOut="HideTip('tt6')"
>DUMA_PROTECT_FREE</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_PROTECT_FREE is used to control the
disposition of memory that is released using
free().
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_MAX_ALLOC"
id="link34"
onMouseOver="ShowTip(event, 'tt7', 'link34')"
onMouseOut="HideTip('tt7')"
>DUMA_MAX_ALLOC</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_MAX_ALLOC is used to control the maximum
memory print of the program in total: When the
sum of allocated and protected memory would
exceed this value in kB, the protected memory is
freed/deleted.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_ALLOW_MALLOC_0"
id="link35"
onMouseOver="ShowTip(event, 'tt8', 'link35')"
onMouseOut="HideTip('tt8')"
>DUMA_ALLOW_MALLOC_0</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_ALLOW_MALLOC_0 is set if DUMA is to allow
malloc(0).
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_MALLOC_FAILEXIT"
id="link36"
onMouseOver="ShowTip(event, 'tt9', 'link36')"
onMouseOut="HideTip('tt9')"
>DUMA_MALLOC_FAILEXIT</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_MALLOC_FAILEXIT controls the behaviour of
DUMA when malloc() fails and would return NULL.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_FREE_ACCESS"
id="link37"
onMouseOver="ShowTip(event, 'tt10', 'link37')"
onMouseOut="HideTip('tt10')"
>DUMA_FREE_ACCESS</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_FREE_ACCESS is set if DUMA is to write
access memory before freeing it.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.DUMA_SHOW_ALLOC"
id="link38"
onMouseOver="ShowTip(event, 'tt11', 'link38')"
onMouseOut="HideTip('tt11')"
>DUMA_SHOW_ALLOC</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
DUMA_SHOW_ALLOC is set if DUMA is to print all
allocations and deallocations to the console.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_allocList"
id="link39"
onMouseOver="ShowTip(event, 'tt12', 'link39')"
onMouseOut="HideTip('tt12')"
>_duma_allocList</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
_DUMA_allocList points to the array of slot
structures used to manage the malloc arena.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_allocListSize"
id="link40"
onMouseOver="ShowTip(event, 'tt13', 'link40')"
onMouseOut="HideTip('tt13')"
>_duma_allocListSize</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
_duma_allocListSize is the size of the
allocation list.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.slotCount"
id="link41"
onMouseOver="ShowTip(event, 'tt14', 'link41')"
onMouseOut="HideTip('tt14')"
>slotCount</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
slotCount is the number of Slot structures in
allocationList.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.unUsedSlots"
id="link42"
onMouseOver="ShowTip(event, 'tt15', 'link42')"
onMouseOut="HideTip('tt15')"
>unUsedSlots</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
unUsedSlots is the number of Slot structures
that are currently available to represent new
malloc buffers.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.slotsPerPage"
id="link43"
onMouseOver="ShowTip(event, 'tt16', 'link43')"
onMouseOut="HideTip('tt16')"
>slotsPerPage</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
slotsPerPage is the number of slot structures
that fit in a virtual memory page.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.sumAllocatedMem"
id="link44"
onMouseOver="ShowTip(event, 'tt17', 'link44')"
onMouseOut="HideTip('tt17')"
>sumAllocatedMem</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
internal variable: sum of allocated -freed
+protected memory in kB
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.sumTotalAllocatedMem"
id="link45"
onMouseOver="ShowTip(event, 'tt18', 'link45')"
onMouseOut="HideTip('tt18')"
>sumTotalAllocatedMem</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
internal variable: sum of allocated memory in kB
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.sumProtectedMem"
id="link46"
onMouseOver="ShowTip(event, 'tt19', 'link46')"
onMouseOut="HideTip('tt19')"
>sumProtectedMem</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
internal variable: sum of protected memory in kB
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.numDeallocs"
id="link47"
onMouseOver="ShowTip(event, 'tt20', 'link47')"
onMouseOut="HideTip('tt20')"
>numDeallocs</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
internal variable: number of deallocations
processed so far
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.numAllocs"
id="link48"
onMouseOver="ShowTip(event, 'tt21', 'link48')"
onMouseOut="HideTip('tt21')"
>numAllocs</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
internal variable: number of allocations
processed so far
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SVariable">
<div class="SEntry">
<div class="SIndent1">
<a href="#_DUMA_Slot.duma_init_done"
>duma_init_done</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SVariable">
<div class="SDescription">
<div class="SIndent1">
internal variable: state of initialization
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SGroup">
<div class="SEntry">
<a href="#_DUMA_Slot.Functions">Functions</a>
</div>
</div>
</td>
<td>
<div class="SGroup">
<div class="SDescription"></div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_assert"
id="link49"
onMouseOver="ShowTip(event, 'tt22', 'link49')"
onMouseOut="HideTip('tt22')"
>_duma_assert</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">
Print message and halt program execution in
crazy way.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.duma_init"
id="link50"
onMouseOver="ShowTip(event, 'tt23', 'link50')"
onMouseOut="HideTip('tt23')"
>duma_init</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">
duma_init sets configuration settings.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_init"
id="link51"
onMouseOver="ShowTip(event, 'tt24', 'link51')"
onMouseOut="HideTip('tt24')"
>_duma_init</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">
_duma_init sets up the memory allocation arena
and the run-time configuration information.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot.allocateMoreSlots"
id="link52"
onMouseOver="ShowTip(event, 'tt25', 'link52')"
onMouseOut="HideTip('tt25')"
>allocateMoreSlots</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">
allocateMoreSlots is called when there are only
enough slot structures left to support the
allocation of a single malloc buffer.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_allocate"
id="link53"
onMouseOver="ShowTip(event, 'tt26', 'link53')"
onMouseOut="HideTip('tt26')"
>_duma_allocate</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">
This is the memory allocator.
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_deallocate"
id="link54"
onMouseOver="ShowTip(event, 'tt27', 'link54')"
onMouseOut="HideTip('tt27')"
>_duma_deallocate</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">
Deallocate allocated memory after running some
checks, then open slot for use.
</div>
</div>
</div>
</td>
</tr>
<tr class="SMarked">
<td>
<div class="SFunction">
<div class="SEntry">
<div class="SIndent1">
<a
href="#_DUMA_Slot._duma_kmalloc"
id="link55"
onMouseOver="ShowTip(event, 'tt28', 'link55')"
onMouseOut="HideTip('tt28')"
>_duma_kmalloc</a
>
</div>
</div>
</div>
</td>
<td>
<div class="SFunction">
<div class="SDescription">
<div class="SIndent1">A version of kmalloc.</div>
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
<!--END_ND_SUMMARY-->
</div>
</div>
</div>
<div class="CGroup">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.Variables"></a>Variables
</h3>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_ALIGNMENT"></a>DUMA_ALIGNMENT
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>size_t DUMA_ALIGNMENT</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_ALIGNMENT is a global variable used to control the
default alignment of buffers returned by malloc(), calloc(),
and realloc(). It is all-caps so that its name matches
the name of the environment variable that is used to set
it. This gives the programmer one less name to remember.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_PROTECT_BELOW"></a>DUMA_PROTECT_BELOW
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>int DUMA_PROTECT_BELOW</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_PROTECT_BELOW is used to modify the behavior of the
allocator. When its value is non-zero, the allocator
will place an inaccessable page immediately <u>before</u> the
malloc buffer in the address space, instead of
<u>after</u> it. Use this to detect malloc buffer
under-runs, rather than over-runs. It won’t detect
both at the same time, so you should test your software twice,
once with this value clear, and once with it set.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_FILL"></a>DUMA_FILL
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>int DUMA_FILL</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_FILL is set to 0-255 if DUMA should fill all new
allocated memory with the specified value. Set to -1
when DUMA should not initialise allocated memory. default is
set to initialise with 255, cause many programs rely on
initialisation to 0!
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_SLACKFILL"></a>DUMA_SLACKFILL
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static int DUMA_SLACKFILL</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_SLACKFILL is set to 0-255. The slack / no mans land
of all new allocated memory is filled with the specified
value. default is set to initialise with 0xAA (=binary
10101010) initialisation to 0!
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_PROTECT_FREE"></a>DUMA_PROTECT_FREE
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long DUMA_PROTECT_FREE</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_PROTECT_FREE is used to control the disposition of memory
that is released using free(). It is all-caps so that
its name matches the name of the environment variable that is
used to set it. If its value is non-zero, memory
released by free is made inaccessable. Any software that
touches free memory will then get a segmentation fault.
Depending on your application and your resources you may tell
DUMA not to use this memory ever again by setting a negative
value f.e. -1. You can tell DUMA to limit the sum
of protected memory by setting a positive value, which is
interpreted in kB. If its value is zero, freed memory
will be available for reallocation, but will still be
inaccessable until it is reallocated.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_MAX_ALLOC"></a>DUMA_MAX_ALLOC
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long DUMA_MAX_ALLOC</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_MAX_ALLOC is used to control the maximum memory print of
the program in total: When the sum of allocated and protected
memory would exceed this value in kB, the protected memory is
freed/deleted.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_ALLOW_MALLOC_0"></a>DUMA_ALLOW_MALLOC_0
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static int DUMA_ALLOW_MALLOC_0</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_ALLOW_MALLOC_0 is set if DUMA is to allow
malloc(0). I trap malloc(0) by default because it is a
common source of bugs. But you should know the
allocation with size 0 is ANSI conform.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_MALLOC_FAILEXIT"></a
>DUMA_MALLOC_FAILEXIT
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static int DUMA_MALLOC_FAILEXIT</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_MALLOC_FAILEXIT controls the behaviour of DUMA when
malloc() fails and would return NULL. But most
applications don’t check the return value for errors ...
so default to Exit on Fail
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_FREE_ACCESS"></a>DUMA_FREE_ACCESS
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static int DUMA_FREE_ACCESS</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_FREE_ACCESS is set if DUMA is to write access memory
before freeing it. This makes easier using watch
expressions in debuggers as the process is interrupted even if
the memory is going to be freed.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.DUMA_SHOW_ALLOC"></a>DUMA_SHOW_ALLOC
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static int DUMA_SHOW_ALLOC</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
DUMA_SHOW_ALLOC is set if DUMA is to print all allocations and
deallocations to the console. Although this generates a
lot of messages, the option can be useful to detect
inefficient code containing many allocations / deallocations
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_allocList"></a>_duma_allocList
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>struct _DUMA_Slot * _duma_allocList</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
_DUMA_allocList points to the array of slot structures used to
manage the malloc arena.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_allocListSize"></a>_duma_allocListSize
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static size_t _duma_allocListSize</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
_duma_allocListSize is the size of the allocation list.
This will always be a multiple of the page size.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.slotCount"></a>slotCount
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static size_t slotCount</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
slotCount is the number of Slot structures in allocationList.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.unUsedSlots"></a>unUsedSlots
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static size_t unUsedSlots</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
unUsedSlots is the number of Slot structures that are
currently available to represent new malloc buffers.
When this number gets too low, we will create new slots.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.slotsPerPage"></a>slotsPerPage
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static size_t slotsPerPage</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
slotsPerPage is the number of slot structures that fit in a
virtual memory page.
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.sumAllocatedMem"></a>sumAllocatedMem
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long sumAllocatedMem</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
internal variable: sum of allocated -freed +protected memory
in kB
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.sumTotalAllocatedMem"></a
>sumTotalAllocatedMem
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long sumTotalAllocatedMem</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
internal variable: sum of allocated memory in kB
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.sumProtectedMem"></a>sumProtectedMem
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long sumProtectedMem</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
internal variable: sum of protected memory in kB
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.numDeallocs"></a>numDeallocs
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long numDeallocs</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
internal variable: number of deallocations processed so far
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.numAllocs"></a>numAllocs
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>static long numAllocs</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
internal variable: number of allocations processed so far
</p>
</div>
</div>
</div>
<div class="CVariable">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.duma_init_done"></a>duma_init_done
</h3>
<div class="CBody">
<p class="CParagraph">
internal variable: state of initialization
</p>
</div>
</div>
</div>
<div class="CGroup">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.Functions"></a>Functions
</h3>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_assert"></a>_duma_assert
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void _duma_assert(
</td>
<td class="PTypePrefix" nowrap>const </td>
<td class="PType" nowrap>char </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>exprstr,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>const </td>
<td class="PType" nowrap>char </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>filename,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>lineno</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
Print message and halt program execution in crazy way.
</p>
</div>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.duma_init"></a>duma_init
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void duma_init(
</td>
<td class="PParameter" nowrap>void</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
duma_init sets configuration settings. Can sometimes
cause problems when called from _duma_init.
</p>
<p class="CParagraph">
See Also:
<a
href="#_DUMA_Slot._duma_init"
class="LFunction"
id="link56"
onMouseOver="ShowTip(event, 'tt24', 'link56')"
onMouseOut="HideTip('tt24')"
>_duma_init</a
>
</p>
</div>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_init"></a>_duma_init
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void _duma_init(
</td>
<td class="PParameter" nowrap>void</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
_duma_init sets up the memory allocation arena and the
run-time configuration information. We will call
duma_init unless DUMA_EXPLICIT_INIT is defined at compile
time.
</p>
<p class="CParagraph">
See Also:
<a
href="#_DUMA_Slot.duma_init"
class="LFunction"
id="link57"
onMouseOver="ShowTip(event, 'tt23', 'link57')"
onMouseOut="HideTip('tt23')"
>duma_init</a
>
</p>
</div>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot.allocateMoreSlots"></a>allocateMoreSlots
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
static void allocateMoreSlots(
</td>
<td class="PParameter" nowrap>void</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
allocateMoreSlots is called when there are only enough slot
structures left to support the allocation of a single malloc
buffer.
</p>
<p class="CParagraph">
See Also:
<a
href="#_DUMA_Slot._duma_allocate"
class="LFunction"
id="link58"
onMouseOver="ShowTip(event, 'tt26', 'link58')"
onMouseOut="HideTip('tt26')"
>_duma_allocate</a
>
</p>
</div>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_allocate"></a>_duma_allocate
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void * _duma_allocate(
</td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameter" nowrap>alignment,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameter" nowrap>userSize,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameter" nowrap>protectBelow,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameter" nowrap>fillByte,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameter" nowrap>protectAllocList,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>enum </td>
<td class="PType" nowrap>_DUMA_Allocator </td>
<td class="PParameter" nowrap>allocator,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>
enum _DUMA_FailReturn
</td>
<td class="PType" nowrap>fail </td>
<td class="PParameter" nowrap>DUMA_PARAMLIST_FL</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
This is the memory allocator. When asked to allocate a
buffer, allocate it in such a way that the end of the buffer
is followed by an inaccessable memory page. If software
overruns that buffer, it will touch the bad page and get an
immediate segmentation fault. It’s then easy to
zero in on the offending code with a debugger.
</p>
<p class="CParagraph">
There are a few complications. If the user asks for an
odd-sized buffer, we would have to have that buffer start on
an odd address if the byte after the end of the buffer was to
be on the inaccessable page. Unfortunately, there is
lots of software that asks for odd-sized buffers and then
requires that the returned address be word-aligned, or the
size of the buffer be a multiple of the word size. An
example are the string-processing functions on Sun systems,
which do word references to the string memory and may refer to
memory up to three bytes beyond the end of the string.
For this reason, I take the alignment requests to memalign()
and valloc() seriously, and
</p>
<p class="CParagraph">DUMA wastes lots of memory.</p>
<p class="CParagraph">
See Also:
<a
href="#_DUMA_Slot._duma_deallocate"
class="LFunction"
id="link59"
onMouseOver="ShowTip(event, 'tt27', 'link59')"
onMouseOut="HideTip('tt27')"
>_duma_deallocate</a
>
</p>
</div>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_deallocate"></a>_duma_deallocate
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void _duma_deallocate(
</td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>void </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>address,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>protectAllocList,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>
enum _DUMA_Allocator
</td>
<td class="PType" nowrap>allocator </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>DUMA_PARAMLIST_FL</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">
Deallocate allocated memory after running some checks, then
open slot for use. Uses Page_Delete to free the
underlying memory.
</p>
<p class="CParagraph">
See Also:
<a
href="paging-h.html#Page_Delete"
class="LFunction"
id="link60"
onMouseOver="ShowTip(event, 'tt29', 'link60')"
onMouseOut="HideTip('tt29')"
>Page_Delete</a
>
<a
href="#_DUMA_Slot._duma_allocate"
class="LFunction"
id="link61"
onMouseOver="ShowTip(event, 'tt26', 'link61')"
onMouseOut="HideTip('tt26')"
>_duma_allocate</a
>
</p>
</div>
</div>
</div>
<div class="CFunction">
<div class="CTopic">
<h3 class="CTitle">
<a name="_DUMA_Slot._duma_kmalloc"></a>_duma_kmalloc
</h3>
<div class="CBody">
<blockquote>
<table
border="0"
cellspacing="0"
cellpadding="0"
class="Prototype"
>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void * _duma_kmalloc(
</td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameter" nowrap>size,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>int </td>
<td class="PType" nowrap>flags </td>
<td class="PParameter" nowrap>DUMA_PARAMLIST_FL</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
<p class="CParagraph">A version of kmalloc.</p>
</div>
</div>
</div>
</td>
</tr>
</table>
<div class="Footer">
<!--START_ND_FOOTER-->Generated by
<a href="http://www.naturaldocs.org">Natural Docs</a
><!--END_ND_FOOTER-->
</div>
<!--START_ND_TOOLTIPS-->
<div class="CToolTip" id="tt1">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static const char version[]</td>
</tr>
</table>
</blockquote>
KDUMA version string
</div>
</div>
<div class="CToolTip" id="tt2">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>size_t DUMA_ALIGNMENT</td>
</tr>
</table>
</blockquote>
DUMA_ALIGNMENT is a global variable used to control the default
alignment of buffers returned by malloc(), calloc(), and realloc().
</div>
</div>
<div class="CToolTip" id="tt3">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>int DUMA_PROTECT_BELOW</td>
</tr>
</table>
</blockquote>
DUMA_PROTECT_BELOW is used to modify the behavior of the allocator.
</div>
</div>
<div class="CToolTip" id="tt4">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>int DUMA_FILL</td>
</tr>
</table>
</blockquote>
DUMA_FILL is set to 0-255 if DUMA should fill all new allocated memory
with the specified value.
</div>
</div>
<div class="CToolTip" id="tt5">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static int DUMA_SLACKFILL</td>
</tr>
</table>
</blockquote>
DUMA_SLACKFILL is set to 0-255.
</div>
</div>
<div class="CToolTip" id="tt6">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long DUMA_PROTECT_FREE</td>
</tr>
</table>
</blockquote>
DUMA_PROTECT_FREE is used to control the disposition of memory that is
released using free().
</div>
</div>
<div class="CToolTip" id="tt7">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long DUMA_MAX_ALLOC</td>
</tr>
</table>
</blockquote>
DUMA_MAX_ALLOC is used to control the maximum memory print of the
program in total: When the sum of allocated and protected memory would
exceed this value in kB, the protected memory is freed/deleted.
</div>
</div>
<div class="CToolTip" id="tt8">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static int DUMA_ALLOW_MALLOC_0</td>
</tr>
</table>
</blockquote>
DUMA_ALLOW_MALLOC_0 is set if DUMA is to allow malloc(0).
</div>
</div>
<div class="CToolTip" id="tt9">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static int DUMA_MALLOC_FAILEXIT</td>
</tr>
</table>
</blockquote>
DUMA_MALLOC_FAILEXIT controls the behaviour of DUMA when malloc() fails
and would return NULL.
</div>
</div>
<div class="CToolTip" id="tt10">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static int DUMA_FREE_ACCESS</td>
</tr>
</table>
</blockquote>
DUMA_FREE_ACCESS is set if DUMA is to write access memory before freeing
it.
</div>
</div>
<div class="CToolTip" id="tt11">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static int DUMA_SHOW_ALLOC</td>
</tr>
</table>
</blockquote>
DUMA_SHOW_ALLOC is set if DUMA is to print all allocations and
deallocations to the console.
</div>
</div>
<div class="CToolTip" id="tt12">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>struct _DUMA_Slot * _duma_allocList</td>
</tr>
</table>
</blockquote>
_DUMA_allocList points to the array of slot structures used to manage
the malloc arena.
</div>
</div>
<div class="CToolTip" id="tt13">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static size_t _duma_allocListSize</td>
</tr>
</table>
</blockquote>
_duma_allocListSize is the size of the allocation list.
</div>
</div>
<div class="CToolTip" id="tt14">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static size_t slotCount</td>
</tr>
</table>
</blockquote>
slotCount is the number of Slot structures in allocationList.
</div>
</div>
<div class="CToolTip" id="tt15">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static size_t unUsedSlots</td>
</tr>
</table>
</blockquote>
unUsedSlots is the number of Slot structures that are currently
available to represent new malloc buffers.
</div>
</div>
<div class="CToolTip" id="tt16">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static size_t slotsPerPage</td>
</tr>
</table>
</blockquote>
slotsPerPage is the number of slot structures that fit in a virtual
memory page.
</div>
</div>
<div class="CToolTip" id="tt17">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long sumAllocatedMem</td>
</tr>
</table>
</blockquote>
internal variable: sum of allocated -freed +protected memory in kB
</div>
</div>
<div class="CToolTip" id="tt18">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long sumTotalAllocatedMem</td>
</tr>
</table>
</blockquote>
internal variable: sum of allocated memory in kB
</div>
</div>
<div class="CToolTip" id="tt19">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long sumProtectedMem</td>
</tr>
</table>
</blockquote>
internal variable: sum of protected memory in kB
</div>
</div>
<div class="CToolTip" id="tt20">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long numDeallocs</td>
</tr>
</table>
</blockquote>
internal variable: number of deallocations processed so far
</div>
</div>
<div class="CToolTip" id="tt21">
<div class="CVariable">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>static long numAllocs</td>
</tr>
</table>
</blockquote>
internal variable: number of allocations processed so far
</div>
</div>
<div class="CToolTip" id="tt22">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>void _duma_assert(</td>
<td class="PTypePrefix" nowrap>const </td>
<td class="PType" nowrap>char </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>exprstr,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>const </td>
<td class="PType" nowrap>char </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>filename,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>lineno</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
Print message and halt program execution in crazy way.
</div>
</div>
<div class="CToolTip" id="tt23">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>void duma_init(</td>
<td class="PParameter" nowrap>void</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
duma_init sets configuration settings.
</div>
</div>
<div class="CToolTip" id="tt24">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>void _duma_init(</td>
<td class="PParameter" nowrap>void</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
_duma_init sets up the memory allocation arena and the run-time
configuration information.
</div>
</div>
<div class="CToolTip" id="tt25">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
static void allocateMoreSlots(
</td>
<td class="PParameter" nowrap>void</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
allocateMoreSlots is called when there are only enough slot structures
left to support the allocation of a single malloc buffer.
</div>
</div>
<div class="CToolTip" id="tt26">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void * _duma_allocate(
</td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameter" nowrap>alignment,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameter" nowrap>userSize,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameter" nowrap>protectBelow,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameter" nowrap>fillByte,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameter" nowrap>protectAllocList,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>enum </td>
<td class="PType" nowrap>_DUMA_Allocator </td>
<td class="PParameter" nowrap>allocator,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>
enum _DUMA_FailReturn
</td>
<td class="PType" nowrap>fail </td>
<td class="PParameter" nowrap>DUMA_PARAMLIST_FL</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
This is the memory allocator.
</div>
</div>
<div class="CToolTip" id="tt27">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void _duma_deallocate(
</td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>void </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>address,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>int </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>protectAllocList,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>
enum _DUMA_Allocator
</td>
<td class="PType" nowrap>allocator </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>DUMA_PARAMLIST_FL</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
Deallocate allocated memory after running some checks, then open slot
for use.
</div>
</div>
<div class="CToolTip" id="tt28">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
void * _duma_kmalloc(
</td>
<td class="PTypePrefix" nowrap></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameter" nowrap>size,</td>
</tr>
<tr>
<td></td>
<td class="PTypePrefix" nowrap>int </td>
<td class="PType" nowrap>flags </td>
<td class="PParameter" nowrap>DUMA_PARAMLIST_FL</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
A version of kmalloc.
</div>
</div>
<div class="CToolTip" id="tt29">
<div class="CFunction">
<blockquote>
<table border="0" cellspacing="0" cellpadding="0" class="Prototype">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="PBeforeParameters" nowrap>
static void Page_Delete(
</td>
<td class="PType" nowrap>void </td>
<td class="PParameterPrefix" nowrap>*</td>
<td class="PParameter" nowrap>address,</td>
</tr>
<tr>
<td></td>
<td class="PType" nowrap>size_t </td>
<td class="PParameterPrefix" nowrap></td>
<td class="PParameter" nowrap>size</td>
<td class="PAfterParameters" nowrap>)</td>
</tr>
</table>
</td>
</tr>
</table>
</blockquote>
Free’s DUMA allocated memory.
</div>
</div>
<!--END_ND_TOOLTIPS-->
<script language="JavaScript">
<!--
if (browserType) {
if (browserVer) {
document.write("</div>");
}
document.write("</div>");
} // -->
</script>
</body>
</html>