Difference between revisions of "Unit HeapManager"

From Ultibo.org
Jump to: navigation, search
Line 10: Line 10:
 
----
 
----
  
''To be documented''
+
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Heap specific constants''' <code> HEAP_MIN_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>HEAP_MIN_BLOCK = 33;</code>
 +
| SizeOf(THeapBlock) + 1
 +
|-
 +
| <code>HEAP_MIN_ALIGN = 64;</code>
 +
| SizeOf(THeapBlock) * 2 Must be greater than or equal to HEAP_MIN_BLOCK, must be a power of 2
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Heap signature constants''' <code> HEAP_SIGNATURE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>HEAP_SIGNATURE = $E84DF600;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>HEAP_SIGNATURE_MASK = $FFFFFF00;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Heap block state constants''' <code> HEAP_STATE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>HEAP_STATE_FREE = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>HEAP_STATE_USED = 1;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>HEAP_STATE_MASK = $000000FF;</code>
 +
| &nbsp;
 +
|-
 +
| <code>HEAP_STATE_ALL  = 2;</code>
 +
| Only for use by GetHeapBlockCount/GetHeapBlockMin/GetHeapBlockMax
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Heap block flag constants''' <code> HEAP_FLAG_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>HEAP_FLAG_NORMAL = $00000000;</code>
 +
| A normal memory block
 +
|-
 +
| <code>HEAP_FLAG_SHARED = $00000001;</code>
 +
| A sharable memory block, usually marked as sharable in the page tables of the memory management unit
 +
|-
 +
| <code>HEAP_FLAG_LOCAL = $00000002;</code>
 +
| A local memory block with an affinity to a specific processor, usually marked as non global in the page tables of the memory management unit
 +
|-
 +
| <code>HEAP_FLAG_CODE = $00000004;</code>
 +
| A code memory block (with an optional affinity to a specific processor), usually marked as executable in the page tables of the memory management unit
 +
|-
 +
| <code>HEAP_FLAG_DEVICE = $00000008;</code>
 +
| A device memory block, usually marked as device memory in the page tables of the memory management unit
 +
|-
 +
| <code>HEAP_FLAG_NOCACHE = $00000010;</code>
 +
| A non cached memory block, usually marked as not cacheable in the page tables of the memory management unit
 +
|-
 +
| <code>HEAP_FLAG_NONSHARED = $00000020;</code>
 +
| A non shared memory block, usually marked as not shareable in the page tables of the memory management unit
 +
|-
 +
| <code>HEAP_FLAG_LOCKED = $00000040;</code>
 +
| A locked memory block (Not currently implemented in Ultibo)
 +
|-
 +
| <code>HEAP_FLAG_IRQ = $00000080;</code>
 +
| An IRQ allocatable memory block
 +
|-
 +
| <code>HEAP_FLAG_FIQ = $00000100;</code>
 +
| An FIQ allocatable memory block
 +
|-
 +
| <code>HEAP_FLAG_RECLAIM = $00000200;</code>
 +
| A reclaimable memory block (eg Disk Cache)(with a registered callback to reclaim as required for normal memory)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>HEAP_FLAG_ALL = $FFFFFFFF;</code>
 +
| Only for use by GetHeapBlockCount/GetHeapBlockMin/GetHeapBlockMax
 +
|-
 +
| <code>HEAP_FLAG_INVALID = $FFFFFFFF;</code>
 +
| Return value from MemFlags/IRQ/FIQ on invalid
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Heap small block constants''' <code> HEAP_SMALL_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>HEAP_SMALL_MIN = 32;</code>
 +
| SizeOf(THeapBlock) Minimum size of a small heap block
 +
|-
 +
| <code>HEAP_SMALL_MAX = SIZE_4K;</code>
 +
| Maximum size of a small heap block
 +
|-
 +
| <code>HEAP_SMALL_ALIGN = 4;</code>
 +
| SizeOf(LongWord); Alignment for small heap blocks
 +
|-
 +
| <code>HEAP_SMALL_SHIFT = 2;</code>
 +
| Size to Index conversion (Divide by 4)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>HEAP_SMALL_LOW = (HEAP_SMALL_MIN div HEAP_SMALL_ALIGN);</code>
 +
| 8
 +
|-
 +
| <code>HEAP_SMALL_HIGH = (HEAP_SMALL_MAX div HEAP_SMALL_ALIGN);</code>
 +
| 1024
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Type definitions ===
 
=== Type definitions ===

Revision as of 04:51, 24 November 2016

Return to Unit Reference


Description


To be documented

Constants



[Expand]
Heap specific constants HEAP_MIN_*


[Expand]
Heap signature constants HEAP_SIGNATURE_*


[Expand]
Heap block state constants HEAP_STATE_*


[Expand]
Heap block flag constants HEAP_FLAG_*


[Expand]
Heap small block constants HEAP_SMALL_*


Type definitions


To be documented

Public variables


To be documented

Function declarations



Initialization functions

[Expand]
procedure RegisterMemoryManager;
Description: To be documented


[Expand]
procedure RegisterHeapBlock(Address:Pointer; Size:PtrUInt);
Description: To be documented


[Expand]
function RequestHeapBlock(Hint:Pointer; Size:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Request registration a Heap Block with specified flags and affinity within an existing block


[Expand]
function RequestSharedHeapBlock(Hint:Pointer; Size:PtrUInt):Pointer;
Description: Request registration of a Shared Heap Block within an existing block


[Expand]
function RequestLocalHeapBlock(Hint:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Request registration of a Local Heap Block within an existing block


[Expand]
function RequestCodeHeapBlock(Hint:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Request registration of a Code Heap Block within an existing block


[Expand]
function RequestDeviceHeapBlock(Hint:Pointer; Size:PtrUInt):Pointer;
Description: Request registration of a Device Heap Block within an existing block


[Expand]
function RequestNoCacheHeapBlock(Hint:Pointer; Size:PtrUInt):Pointer;
Description: Request registration of a Non Cached Heap Block within an existing block


[Expand]
function RequestNonSharedHeapBlock(Hint:Pointer; Size:PtrUInt):Pointer;
Description: Request registration of a Non Shared Heap Block within an existing block


[Expand]
function RequestIRQHeapBlock(Hint:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Request registration of an IRQ Heap Block within an existing block


[Expand]
function RequestFIQHeapBlock(Hint:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Request registration of an FIQ Heap Block within an existing block


Heap functions

[Expand]
function GetMemEx(Size:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Allocate a block of memory with the flags and affinity requested


[Expand]
function GetAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate a block of normal memory aligned on a multiple of the alignment value


[Expand]
function GetAlignedMemEx(Size,Alignment:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Allocate a block of memory aligned on a multiple of the alignment value with the flags and affinity requested


[Expand]
function GetSharedMem(Size:PtrUInt):Pointer;
Description: Allocate a block of shared memory


[Expand]
function GetSharedAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate a block of shared memory aligned on a multiple of the alignment value


[Expand]
function GetLocalMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of local memory


[Expand]
function GetLocalAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of local memory aligned on a multiple of the alignment value


[Expand]
function GetCodeMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of code memory


[Expand]
function GetCodeAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of code memory aligned on a multiple of the alignment value


[Expand]
function GetDeviceMem(Size:PtrUInt):Pointer;
Description: Allocate a block of device memory


[Expand]
function GetDeviceAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate a block of device memory aligned on a multiple of the alignment value


[Expand]
function GetNoCacheMem(Size:PtrUInt):Pointer;
Description: Allocate a block of non cached memory


[Expand]
function GetNoCacheAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate a block of non cached memory aligned on a multiple of the alignment value


[Expand]
function GetNonSharedMem(Size:PtrUInt):Pointer;
Description: Allocate a block of non shared memory


[Expand]
function GetNonSharedAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate a block of non shared memory aligned on a multiple of the alignment value


[Expand]
function GetIRQMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of IRQ memory


[Expand]
function GetIRQAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of IRQ memory aligned on a multiple of the alignment value


[Expand]
function GetFIQMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of FIQ memory


[Expand]
function GetFIQAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate a block of FIQ memory aligned on a multiple of the alignment value


[Expand]
function FreeIRQMem(Addr:Pointer):PtrUInt;
Description: Free a block of IRQ memory


[Expand]
function FreeFIQMem(Addr:Pointer):PtrUInt;
Description: Free a block of FIQ memory


[Expand]
function AllocMemEx(Size:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Allocate and clear a block of memory with the flags and affinity requested


[Expand]
function ReAllocMemEx(var Addr:Pointer; Size:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Reallocate a block of memory with the flags and affinity requested


[Expand]
function AllocAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate and clear a block of normal memory aligned on a multiple of the alignment value


[Expand]
function AllocAlignedMemEx(Size,Alignment:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Allocate and clear a block of normal memory aligned on a multiple of the alignment value with the flags and affinity requested


[Expand]
function ReAllocAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt):Pointer;
Description: Reallocate a block of normal memory aligned on a multiple of the alignment value


[Expand]
function ReAllocAlignedMemEx(var Addr:Pointer; Size,Alignment:PtrUInt; Flags,Affinity:LongWord):Pointer;
Description: Reallocate a block of memory aligned on a multiple of the alignment value with the flags and affinity requested


[Expand]
function AllocSharedMem(Size:PtrUInt):Pointer;
Description: Allocate and clear a block of shared memory


[Expand]
function AllocSharedAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate and clear a block of shared memory aligned on a multiple of the alignment value


[Expand]
function ReAllocSharedMem(var Addr:Pointer; Size:PtrUInt):Pointer;
Description: Reallocate a block of shared memory


[Expand]
function ReAllocSharedAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt):Pointer;
Description: Reallocate a block of shared memory aligned on a multiple of the alignment value


[Expand]
function AllocLocalMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of local memory


[Expand]
function AllocLocalAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of local memory aligned on a multiple of the alignment value


[Expand]
function ReAllocLocalMem(var Addr:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of local memory


[Expand]
function ReAllocLocalAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of local memory aligned on a multiple of the alignment value


[Expand]
function AllocCodeMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of code memory


[Expand]
function AllocCodeAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of code memory aligned on a multiple of the alignment value


[Expand]
function ReAllocCodeMem(var Addr:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of code memory


[Expand]
function ReAllocCodeAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of code memory aligned on a multiple of the alignment value


[Expand]
function AllocDeviceMem(Size:PtrUInt):Pointer;
Description: Allocate and clear a block of device memory


[Expand]
function AllocDeviceAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate and clear a block of device memory aligned on a multiple of the alignment value


[Expand]
function ReAllocDeviceMem(var Addr:Pointer; Size:PtrUInt):Pointer;
Description: Reallocate a block of device memory


[Expand]
function ReAllocDeviceAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt):Pointer;
Description: Reallocate a block of device memory aligned on a multiple of the alignment value


[Expand]
function AllocNoCacheMem(Size:PtrUInt):Pointer;
Description: Allocate and clear a block of non cached memory


[Expand]
function AllocNoCacheAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate and clear a block of non cached memory aligned on a multiple of the alignment value


[Expand]
function ReAllocNoCacheMem(var Addr:Pointer; Size:PtrUInt):Pointer;
Description: Reallocate a block of non cached memory


[Expand]
function ReAllocNoCacheAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt):Pointer;
Description: Reallocate a block of non cached memory aligned on a multiple of the alignment value


[Expand]
function AllocNonSharedMem(Size:PtrUInt):Pointer;
Description: Allocate and clear a block of non shared memory


[Expand]
function AllocNonSharedAlignedMem(Size,Alignment:PtrUInt):Pointer;
Description: Allocate and clear a block of non shared memory aligned on a multiple of the alignment value


[Expand]
function ReAllocNonSharedMem(var Addr:Pointer; Size:PtrUInt):Pointer;
Description: Reallocate a block of non shared memory


[Expand]
function ReAllocNonSharedAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt):Pointer;
Description: Reallocate a block of non shared memory aligned on a multiple of the alignment value


[Expand]
function AllocIRQMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of IRQ memory


[Expand]
function AllocIRQAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of IRQ memory aligned on a multiple of the alignment value


[Expand]
function ReAllocIRQMem(var Addr:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of IRQ memory


[Expand]
function ReAllocIRQAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of IRQ memory aligned on a multiple of the alignment value


[Expand]
function AllocFIQMem(Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of FIQ memory


[Expand]
function AllocFIQAlignedMem(Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Allocate and clear a block of FIQ memory aligned on a multiple of the alignment value


[Expand]
function ReAllocFIQMem(var Addr:Pointer; Size:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of FIQ memory


[Expand]
function ReAllocFIQAlignedMem(var Addr:Pointer; Size,Alignment:PtrUInt; Affinity:LongWord):Pointer;
Description: Reallocate a block of FIQ memory aligned on a multiple of the alignment value


[Expand]
function SizeIRQMem(Addr:Pointer):PtrUInt;
Description: Return the size of an allocated block of IRQ memory


[Expand]
function SizeFIQMem(Addr:Pointer):PtrUInt;
Description: Return the size of an allocated block of FIQ memory


[Expand]
function MemFlags(Addr:Pointer):LongWord;
Description: Return the flags of an allocated block of memory


[Expand]
function MemFlagsIRQ(Addr:Pointer):LongWord;
Description: Return the flags of an allocated block of IRQ memory


[Expand]
function MemFlagsFIQ(Addr:Pointer):LongWord;
Description: Return the flags of an allocated block of FIQ memory


[Expand]
function GetHeapStatistics:THeapStatistics;
Description: Return detailed statistics for the heap manager


[Expand]
function GetHeapBlockCount(State:LongWord):LongWord;
Description: Get the total number of current heap blocks based on state


[Expand]
function GetHeapBlockCountEx(State,Flags,Affinity:LongWord):LongWord;
Description: Get the number of current heap blocks based on state, flags and affinity


[Expand]
function GetHeapBlockMin(State:LongWord):LongWord;
Description: Get the minimum size of current heap blocks based on state


[Expand]
function GetHeapBlockMinEx(State,Flags,Affinity:LongWord):LongWord;
Description: Get the minimum size of current heap blocks based on state, flags and affinity


[Expand]
function GetHeapBlockMax(State:LongWord):LongWord;
Description: Get the maximum size of current heap blocks based on state


[Expand]
function GetHeapBlockMaxEx(State,Flags,Affinity:LongWord):LongWord;
Description: Get the maximum size of current heap blocks based on state, flags and affinity


[Expand]
function CreateHeapSnapshot(State:LongWord):PHeapSnapshot;
Description: To be documented


[Expand]
function CreateHeapSnapshotEx(State,Flags,Affinity:LongWord):PHeapSnapshot;
Description: To be documented


[Expand]
function DestroyHeapSnapshot(Snapshot:PHeapSnapshot):LongWord;
Description: To be documented


Internal functions

[Expand]
function GetHeapBlock(Address:Pointer):PHeapBlock;
Description: Get the Heap Block referenced by Address


[Expand]
function FindHeapBlock(Address:Pointer; Size:PtrUInt):PHeapBlock;
Description: Find the Heap Block containing Address up to the Size specified


[Expand]
function AddHeapBlock(Block:PHeapBlock):Boolean;
Description: Add a heap block, sorted by ascending Address order


[Expand]
function SplitHeapBlock(Block:PHeapBlock; Size:PtrUInt):PHeapBlock;
Description: Split a heap block at the size indicated


[Expand]
function MergeHeapBlock(Block:PHeapBlock):PHeapBlock;
Description: Merge a heap block with Prev or Next blocks if free


[Expand]
function GetFreeBlock(Size:PtrUInt):PHeapBlock;
Description: Get a free block of at least the size indicated


[Expand]
function GetFreeBlockEx(Size:PtrUInt; Flags,Affinity:LongWord):PHeapBlock;
Description: Get a free block of at least the size indicated with the flags and affinity requested


[Expand]
function FindFreeBlock(Size:PtrUInt):PHeapBlock;
Description: Find a free block of at least the size indicated with no flags or affinity which is alignable to the HEAP_REQUEST_ALIGNMENT value


[Expand]
function AddFreeBlock(Block:PHeapBlock):Boolean;
Description: Add a free block, sorted by ascending Size order


[Expand]
function RemoveFreeBlock(Block:PHeapBlock):Boolean;
Description: Remove a free block


[Expand]
function GetUsedBlock(Address:Pointer):PHeapBlock;
Description: Get a used block by address


[Expand]
function CheckUsedBlock(Address:Pointer):Boolean; inline;
Description: Check a used block by address


[Expand]
function AddUsedBlock(Block:PHeapBlock):Boolean;
Description: Add a used block


[Expand]
function RemoveUsedBlock(Block:PHeapBlock):Boolean;
Description: Remove a used block


[Expand]
function GetIRQBlock(Address:Pointer):PHeapBlock;
Description: Get the IRQ Heap Block referenced by Address


[Expand]
function CheckIRQBlock(Address:Pointer):Boolean;
Description: Check the IRQ Heap Block referenced by Address


[Expand]
function AddIRQBlock(Block:PHeapBlock):Boolean;
Description: Add an IRQ heap block, sorted by ascending Address order


[Expand]
function SplitIRQBlock(Block:PHeapBlock; Size:PtrUInt):PHeapBlock;
Description: Split an IRQ heap block at the size indicated


[Expand]
function MergeIRQBlock(Block:PHeapBlock):PHeapBlock;
Description: Merge an IRQ heap block with Prev or Next blocks if free


[Expand]
function GetFreeIRQBlock(Size:PtrUInt; Affinity:LongWord):PHeapBlock;
Description: Get a free IRQ block of at least the size indicated


[Expand]
function AddFreeIRQBlock(Block:PHeapBlock):Boolean;
Description: Add a free IRQ block, sorted by ascending Size order


[Expand]
function RemoveFreeIRQBlock(Block:PHeapBlock):Boolean;
Description: Remove a free IRQ block


[Expand]
function GetFIQBlock(Address:Pointer):PHeapBlock;
Description: Get the FIQ Heap Block referenced by Address


[Expand]
function CheckFIQBlock(Address:Pointer):Boolean;
Description: Check the FIQ Heap Block referenced by Address


[Expand]
function AddFIQBlock(Block:PHeapBlock):Boolean;
Description: Add an FIQ heap block, sorted by ascending Address order


[Expand]
function SplitFIQBlock(Block:PHeapBlock; Size:PtrUInt):PHeapBlock;
Description: Split an FIQ heap block at the size indicated


[Expand]
function MergeFIQBlock(Block:PHeapBlock):PHeapBlock;
Description: Merge an FIQ heap block with Prev or Next blocks if free


[Expand]
function GetFreeFIQBlock(Size:PtrUInt; Affinity:LongWord):PHeapBlock;
Description: Get a free FIQ block of at least the size indicated


[Expand]
function AddFreeFIQBlock(Block:PHeapBlock):Boolean;
Description: Add a free FIQ block, sorted by ascending Size order


[Expand]
function RemoveFreeFIQBlock(Block:PHeapBlock):Boolean;
Description: Remove a free FIQ block


RTL heap manager functions

[Expand]
function SysGetMem(Size:PtrUInt):Pointer;
Description: Allocate a block of normal memory


[Expand]
function SysFreeMem(Addr:Pointer):PtrUInt;
Description: Free a block of memory


[Expand]
function SysFreeMemSize(Addr:Pointer; Size:PtrUInt):PtrUInt;
Description: Free a block of memory


[Expand]
function SysAllocMem(Size:PtrUInt):Pointer;
Description: Allocate and clear a block of normal memory


[Expand]
function SysReAllocMem(var Addr:Pointer; Size:PtrUInt):Pointer;
Description: Reallocate a block of normal memory


[Expand]
function SysSizeMem(Addr:Pointer):PtrUInt;
Description: Return the size of an allocated block of memory


[Expand]
procedure SysInitThread;
Description: Initialize thread specific heap information


[Expand]
procedure SysDoneThread;
Description: Finalize thread specific heap information


[Expand]
procedure SysRelocateHeap;
Description: Relocate heap data


[Expand]
function SysGetHeapStatus:THeapStatus;
Description: Return status information for the heap manager


[Expand]
function SysGetFPCHeapStatus:TFPCHeapStatus;
Description: Return status information for the heap manager


Helper functions

[Expand]
procedure AcquireHeapLock; inline;
Description: To be documented


[Expand]
procedure ReleaseHeapLock; inline;
Description: To be documented


[Expand]
procedure AcquireHeapIRQLock; inline;
Description: To be documented


[Expand]
procedure ReleaseHeapIRQLock; inline;
Description: To be documented


[Expand]
procedure AcquireHeapFIQLock; inline;
Description: To be documented


[Expand]
procedure ReleaseHeapFIQLock; inline;
Description: To be documented


[Expand]
procedure RegisterHeapLock(const Lock:THeapLock);
Description: To be documented


[Expand]
function HeapStateToString(State:LongWord):String;
Description: To be documented


Return to Unit Reference