Difference between revisions of "Unit HeapManager"

From Ultibo.org
Jump to: navigation, search
Line 644: Line 644:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 656: Line 656:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 668: Line 668:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides the requested base address of the heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides the requested base address of the heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT. Flags provides the heap block flags such as shared, local, code, device, nocache etc.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT. Flags provides the heap block flags such as shared, local, code, device, nocache etc.
 
|-
 
|-
! '''Affinity'''
+
! Affinity
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been registered or nil if the request failed
 
| The return is the heap block that has been registered or nil if the request failed
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate this memory use GetMemEx/AllocMemEx etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate this memory use GetMemEx/AllocMemEx etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 692: Line 692:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides the requested base address of the shared heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides the requested base address of the shared heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as shared or nil if the request failed (the memory management unit should mark this region of memory as sharable)
 
| The return is the heap block that has been marked as shared or nil if the request failed (the memory management unit should mark this region of memory as sharable)
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate shared memory use GetSharedMem/AllocSharedMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate shared memory use GetSharedMem/AllocSharedMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 713: Line 713:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides a requested base address of the local heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil  if any heap block is suitable
 
| The hint provides a requested base address of the local heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil  if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Affinity'''
+
! Affinity
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as local or nil if the request failed (The memory management unit should mark this region of memory as local or non global)
 
| The return is the heap block that has been marked as local or nil if the request failed (The memory management unit should mark this region of memory as local or non global)
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate local memory use GetLocalMem/AllocLocalMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate local memory use GetLocalMem/AllocLocalMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 737: Line 737:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides a requested base address of the code heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides a requested base address of the code heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Affinity'''
+
! Affinity
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as code or nil if the request failed (The memory management unit should mark this region of memory as executable)
 
| The return is the heap block that has been marked as code or nil if the request failed (The memory management unit should mark this region of memory as executable)
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate code memory use GetCodeMem/AllocCodeMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate code memory use GetCodeMem/AllocCodeMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 761: Line 761:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides the requested base address of the device heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides the requested base address of the device heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as device or nil if the request failed (The memory management unit should mark this region of memory as sharable)
 
| The return is the heap block that has been marked as device or nil if the request failed (The memory management unit should mark this region of memory as sharable)
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate device memory use GetDeviceMem/AllocDeviceMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate device memory use GetDeviceMem/AllocDeviceMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 782: Line 782:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides the requested base address of the non cached heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides the requested base address of the non cached heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as non cached or nil if the request failed (The memory management unit should mark this region of memory as sharable)
 
| The return is the heap block that has been marked as non cached or nil if the request failed (The memory management unit should mark this region of memory as sharable)
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate non cached memory use GetNoCacheMem/AllocNoCacheMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate non cached memory use GetNoCacheMem/AllocNoCacheMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 803: Line 803:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides the requested base address of the non shared heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides the requested base address of the non shared heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as non shared or nil if the request failed (The memory management unit should mark this region of memory as sharable)
 
| The return is the heap block that has been marked as non shared or nil if the request failed (The memory management unit should mark this region of memory as sharable)
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate non shared memory use GetNonSharedMem/AllocNonSharedMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate non shared memory use GetNonSharedMem/AllocNonSharedMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 824: Line 824:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides a requested base address of the IRQ heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides a requested base address of the IRQ heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Affinity'''
+
! Affinity
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as IRQ or nil if the request failed
 
| The return is the heap block that has been marked as IRQ or nil if the request failed
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate IRQ memory use GetIRQMem/AllocIRQMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate IRQ memory use GetIRQMem/AllocIRQMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 848: Line 848:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Hint'''
+
! Hint
 
| The hint provides a requested base address of the FIQ heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
| The hint provides a requested base address of the FIQ heap block but may be overridden by the memory manager if the block is already partially or fully allocated, pass nil if any heap block is suitable
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
| The size provides the requested size of the heap block. Size must be a power of 2 and both Hint and the returned pointer must be aligned on a multiple of HEAP_REQUEST_ALIGNMENT.
 
|-
 
|-
! '''Affinity'''
+
! Affinity
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
| The affinity provides the processor affinity mask, a mask of 0 indicates no specific processor
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the heap block that has been marked as FIQ or nil if the request failed
 
| The return is the heap block that has been marked as FIQ or nil if the request failed
 
|-
 
|-
! '''Note'''
+
! Note
 
| To allocate FIQ memory use GetFIQMem/AllocFIQMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
| To allocate FIQ memory use GetFIQMem/AllocFIQMem etc. The return value points directly to the heap block, to access the memory referenced by the heap block you must add SizeOf(THeapBlock) to this value.
 
|-
 
|-
Line 875: Line 875:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 887: Line 887:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 899: Line 899:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 911: Line 911:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 923: Line 923:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 935: Line 935:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 947: Line 947:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 959: Line 959:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 971: Line 971:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 983: Line 983:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 995: Line 995:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,007: Line 1,007:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,019: Line 1,019:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,031: Line 1,031:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,043: Line 1,043:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,055: Line 1,055:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,067: Line 1,067:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,079: Line 1,079:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,091: Line 1,091:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,103: Line 1,103:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,115: Line 1,115:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,127: Line 1,127:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,139: Line 1,139:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,151: Line 1,151:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,163: Line 1,163:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,175: Line 1,175:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,187: Line 1,187:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,199: Line 1,199:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,211: Line 1,211:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,223: Line 1,223:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,235: Line 1,235:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,247: Line 1,247:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,259: Line 1,259:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,271: Line 1,271:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,283: Line 1,283:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,295: Line 1,295:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,307: Line 1,307:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,319: Line 1,319:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,331: Line 1,331:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,343: Line 1,343:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,355: Line 1,355:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,367: Line 1,367:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,379: Line 1,379:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,391: Line 1,391:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,403: Line 1,403:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,415: Line 1,415:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,427: Line 1,427:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,439: Line 1,439:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,451: Line 1,451:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,463: Line 1,463:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,475: Line 1,475:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,487: Line 1,487:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| The memory must be freed using FreeIRQMem
 
| The memory must be freed using FreeIRQMem
 
|-
 
|-
Line 1,499: Line 1,499:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
! '''Note'''
+
! Note
 
| The memory must be freed using FreeIRQMem
 
| The memory must be freed using FreeIRQMem
 
|-
 
|-
Line 1,514: Line 1,514:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,526: Line 1,526:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,538: Line 1,538:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| The memory must be freed using FreeFIQMem
 
| The memory must be freed using FreeFIQMem
 
|-
 
|-
Line 1,550: Line 1,550:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
! '''Note'''
+
! Note
 
| The memory must be freed using FreeFIQMem
 
| The memory must be freed using FreeFIQMem
 
|-
 
|-
Line 1,565: Line 1,565:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,577: Line 1,577:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Alignment'''
+
! Alignment
 
| The alignment must be a multiple of the minimum alignment configuration
 
| The alignment must be a multiple of the minimum alignment configuration
 
|-
 
|-
Line 1,589: Line 1,589:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,601: Line 1,601:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,613: Line 1,613:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,625: Line 1,625:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,637: Line 1,637:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,649: Line 1,649:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,661: Line 1,661:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,673: Line 1,673:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This uses the block list (not the Free/Used/Small lists) in order to account for all blocks
 
| This uses the block list (not the Free/Used/Small lists) in order to account for all blocks
 
|-
 
|-
Line 1,685: Line 1,685:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,697: Line 1,697:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This uses the block list (not the Free/Used/Small lists) in order to account for all blocks
 
| This uses the block list (not the Free/Used/Small lists) in order to account for all blocks
 
|-
 
|-
Line 1,709: Line 1,709:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,721: Line 1,721:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| This uses the block list (not the Free/Used/Small lists) in order to account for all blocks
 
| This uses the block list (not the Free/Used/Small lists) in order to account for all blocks
 
|-
 
|-
Line 1,733: Line 1,733:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,745: Line 1,745:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,757: Line 1,757:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,772: Line 1,772:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Address has already been normalized to include the Heap Block. Caller must hold the heap lock.
 
| Address has already been normalized to include the Heap Block. Caller must hold the heap lock.
 
|-
 
|-
Line 1,784: Line 1,784:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Address has already been normalized to include the Heap Block. Caller must hold the heap lock.
 
| Address has already been normalized to include the Heap Block. Caller must hold the heap lock.
 
|-
 
|-
Line 1,796: Line 1,796:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,808: Line 1,808:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| Return The return is the split portion of the block
 
| Return The return is the split portion of the block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must remove block from the free list. Caller must add split block to the free list. Caller must hold the heap lock.
 
| Caller must remove block from the free list. Caller must add split block to the free list. Caller must hold the heap lock.
 
|-
 
|-
Line 1,823: Line 1,823:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the merged result of the blocks
 
| The return is the merged result of the blocks
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must remove block from the free list. Caller must add merged block to the free list. Caller must hold the heap lock.
 
| Caller must remove block from the free list. Caller must add merged block to the free list. Caller must hold the heap lock.
 
|-
 
|-
Line 1,838: Line 1,838:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size has already been normalized to alignment and includes the size of the Heap Block
 
| The size has already been normalized to alignment and includes the size of the Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,853: Line 1,853:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size has already been normalized to alignment and includes the size of the Heap Block
 
| The size has already been normalized to alignment and includes the size of the Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,868: Line 1,868:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size is the exact size and has not been normalized
 
| The size is the exact size and has not been normalized
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,883: Line 1,883:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,895: Line 1,895:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,907: Line 1,907:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address has already been normalized to include the Heap Block
 
| The address has already been normalized to include the Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,922: Line 1,922:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address has already been normalized to include the Heap Block
 
| The address has already been normalized to include the Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,937: Line 1,937:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,949: Line 1,949:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the heap lock
 
| Caller must hold the heap lock
 
|-
 
|-
Line 1,961: Line 1,961:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address has already been normalized to include the IRQ Heap Block
 
| The address has already been normalized to include the IRQ Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the IRQ heap lock
 
| Caller must hold the IRQ heap lock
 
|-
 
|-
Line 1,976: Line 1,976:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address has already been normalized to include the IRQ Heap Block
 
| The address has already been normalized to include the IRQ Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the IRQ heap lock
 
| Caller must hold the IRQ heap lock
 
|-
 
|-
Line 1,991: Line 1,991:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the IRQ heap lock
 
| Caller must hold the IRQ heap lock
 
|-
 
|-
Line 2,003: Line 2,003:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the split portion of the block
 
| The return is the split portion of the block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must remove block from the IRQ free list. Caller must add split block to the IRQ free list. Caller must hold the IRQ heap lock.
 
| Caller must remove block from the IRQ free list. Caller must add split block to the IRQ free list. Caller must hold the IRQ heap lock.
 
|-
 
|-
Line 2,018: Line 2,018:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the merged result of the blocks
 
| The return is the merged result of the blocks
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must remove block from the IRQ free list. Caller must add merged block to the IRQ free list. Caller must hold the IRQ heap lock.
 
| Caller must remove block from the IRQ free list. Caller must add merged block to the IRQ free list. Caller must hold the IRQ heap lock.
 
|-
 
|-
Line 2,033: Line 2,033:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size has already been normalized to alignment and includes the size of the IRQ Heap Block
 
| The size has already been normalized to alignment and includes the size of the IRQ Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the IRQ heap lock
 
| Caller must hold the IRQ heap lock
 
|-
 
|-
Line 2,048: Line 2,048:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the IRQ heap lock
 
| Caller must hold the IRQ heap lock
 
|-
 
|-
Line 2,060: Line 2,060:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the IRQ heap lock
 
| Caller must hold the IRQ heap lock
 
|-
 
|-
Line 2,072: Line 2,072:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address has already been normalized to include the FIQ Heap Block
 
| The address has already been normalized to include the FIQ Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the FIQ heap lock
 
| Caller must hold the FIQ heap lock
 
|-
 
|-
Line 2,087: Line 2,087:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address has already been normalized to include the FIQ Heap Block
 
| The address has already been normalized to include the FIQ Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the FIQ heap lock
 
| Caller must hold the FIQ heap lock
 
|-
 
|-
Line 2,102: Line 2,102:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the FIQ heap lock
 
| Caller must hold the FIQ heap lock
 
|-
 
|-
Line 2,114: Line 2,114:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the split portion of the block
 
| The return is the split portion of the block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must remove block from the FIQ free list. Caller must add split block to the FIQ free list. Caller must hold the FIQ heap lock.
 
| Caller must remove block from the FIQ free list. Caller must add split block to the FIQ free list. Caller must hold the FIQ heap lock.
 
|-
 
|-
Line 2,129: Line 2,129:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| The return is the merged result of the blocks
 
| The return is the merged result of the blocks
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must remove block from the FIQ free list. Caller must add merged block to the FIQ free list. Caller must hold the FIQ heap lock.
 
| Caller must remove block from the FIQ free list. Caller must add merged block to the FIQ free list. Caller must hold the FIQ heap lock.
 
|-
 
|-
Line 2,144: Line 2,144:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size has already been normalized to alignment and includes the size of the FIQ Heap Block
 
| The size has already been normalized to alignment and includes the size of the FIQ Heap Block
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the FIQ heap lock
 
| Caller must hold the FIQ heap lock
 
|-
 
|-
Line 2,159: Line 2,159:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the FIQ heap lock
 
| Caller must hold the FIQ heap lock
 
|-
 
|-
Line 2,171: Line 2,171:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the FIQ heap lock
 
| Caller must hold the FIQ heap lock
 
|-
 
|-
Line 2,186: Line 2,186:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,198: Line 2,198:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,210: Line 2,210:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Size is not currently used
 
| Size is not currently used
 
|-
 
|-
Line 2,222: Line 2,222:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,234: Line 2,234:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,246: Line 2,246:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,258: Line 2,258:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,270: Line 2,270:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,282: Line 2,282:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,294: Line 2,294:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,306: Line 2,306:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,321: Line 2,321:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,333: Line 2,333:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,345: Line 2,345:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,357: Line 2,357:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,369: Line 2,369:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,381: Line 2,381:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,393: Line 2,393:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 2,405: Line 2,405:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-

Revision as of 04:17, 15 April 2018

Return to Unit Reference


Description


Ultibo Heap Manager interface unit

To be documented

Constants



[Expand]
Heap specific constants HEAP_MIN_*


[Expand]
Heap signature HEAP_SIGNATURE_*


[Expand]
Heap block state HEAP_STATE_*


[Expand]
Heap block flag HEAP_FLAG_*


[Expand]
Heap small block HEAP_SMALL_*


Type definitions



Heap callback

THeapCallback = function(Size:PtrUInt):LongWord;

Heap block

[Expand]

PHeapBlock = ^THeapBlock;

THeapBlock = record

Heap small blocks

[Expand]

PSmallBlocks = ^TSmallBlocks;

TSmallBlocks = array[HEAP_SMALL_LOW..HEAP_SMALL_HIGH] of PHeapBlock; {8..1024}

Heap lock

[Expand]

PHeapLock = ^THeapLock;

THeapLock = record

Heap statistics

[Expand]

PHeapStatistics = ^THeapStatistics;

THeapStatistics = record

Heap snapshot

[Expand]

PHeapSnapshot = ^THeapSnapshot;

THeapSnapshot = record


Public variables


None defined

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