<a name="l15"></a>You can create new, independent heaps using </span><a href="/Wb/Kernel/Mem/HeapCtrl.HC#l1"><span class=cF4>HeapCtrlInit</span></a><span class=cF0>(). Then, use the </span><span class=cF4>
<a name="l16"></a></span><a href="/Wb/Kernel/KernelA.HH#l2863"><span class=cF4>CHeapCtrl</span></a><span class=cF0> as the 2nd arg to </span><a href="/Wb/Kernel/Mem/MAllocFree.HC#l387"><span class=cF4>MAlloc</span></a><span class=cF0>(). See </span><a href="/Wb/Adam/Opt/Utils/HeapLog.HC#l73"><span class=cF4>HeapLog</span></a><span class=cF0>() for an example.
<a name="l18"></a>Memory alloced by a task will be freed when the task is killed. The </span><a href="/Wb/Doc/Glossary.DD.HTML#l171"><span class=cF4>Adam Task</span></a><span class=cF0>
<a name="l22"></a>All of the regular page tables are marked, "cached". When accessing hardware,
<a name="l23"></a>however, you need uncached page table. The lowest 4Gig addresses have an alias
<a name="l24"></a>to access hardware located toward the top of mapped space, </span><span class=cF2>0x10000000000</span><span class=cF0>. See </span><span class=cF4>
<a name="l36"></a> Kernel module, placed here by the boot-loader, </span><a href="/Wb/Kernel/KernelA.HH#l3835"><span class=cF4>BOOT_RAM_BASE</span></a><span class=cF0>.
<a name="l39"></a> Boot block relocated here before loading the Kernel module, </span><a href="/Wb/Adam/Opt/Boot/BootDVD.HC#l1"><span class=cF4>BootDVD</span></a><span class=cF0> & </span><a href="/Wb/Adam/Opt/Boot/BootHD.HC#l1"><span class=cF4>BootHD</span></a><span class=cF0>.
<a name="l43"></a></span><span class=cF2> 0x00000A0000- 0x00000BFFFF</span><span class=cF0> VGA graphics mem with alias at </span><a href="/Wb/Kernel/KGlbls.HC#l30"><span class=cF4>text</span></a><span class=cF0>.vga_alias.
<a name="l50"></a> supported, so </span><a href="/Wb/Kernel/Mem/MemPhysical.HC#l58"><span class=cF4>Mem32DevAlloc</span></a><span class=cF0>() flaws are not an issue.
<a name="l60"></a> 64-bit devices are alloced with </span><a href="/Wb/Kernel/Mem/MemPhysical.HC#l108"><span class=cF4>Mem64DevAlloc</span></a><span class=cF0>() counting bwd, but no PCI
<a name="l66"></a>the obvious effect that fragmentation has on contiguous requests. I can </span><a href="/Wb/Kernel/Mem/MAllocFree.HC#l387"><span class=cF4>MAlloc</span></a><span class=cF0>(
<a name="l67"></a>) an 8Gig chunk on my 12Gig machine. I can </span><a href="/Wb/Kernel/Mem/MAllocFree.HC#l387"><span class=cF4>MAlloc</span></a><span class=cF0>() an 32Gig chunk on my 64Gig
<a name="l98"></a></span><a href="/Wb/Kernel/Mem/MemPhysical.HC#l138"><span class=cF4>UncachedAliasAlloc</span></a><span class=cF0>(). Unfortunately, I could no longer boast of the simplicity
<a name="l102"></a>alias location. See </span><a href="/Wb/Kernel/KMain.HC#l69"><span class=cF4>text.vga_alias</span></a><span class=cF0>. I also no longer cause a fault when
<a name="l106"></a>at the top of address space. See </span><a href="/Wb/Kernel/Mem/MemPhysical.HC#l138"><span class=cF4>UncachedAliasAlloc</span></a><span class=cF0>(). Not all computers
<a name="l112"></a>all of the first 4Gig can be accessed without caching at the </span><a href="/Wb/Kernel/KMain.HC#l69"><span class=cF4>dev.uncached_alias</span></a><span class=cF0>.