|
@@ -56,7 +56,7 @@
|
|
TinyHeapAllocGranularity = sizeof(TTinyHeapBlock);
|
|
TinyHeapAllocGranularity = sizeof(TTinyHeapBlock);
|
|
|
|
|
|
var
|
|
var
|
|
- TinyHeapBlocks: PTinyHeapBlock = nil;
|
|
|
|
|
|
+ FreeList: PTinyHeapBlock = nil;
|
|
|
|
|
|
function EncodeTinyHeapFreeBlockSize(Size: PtrUInt): TTinyHeapFreeBlockSize; inline;
|
|
function EncodeTinyHeapFreeBlockSize(Size: PtrUInt): TTinyHeapFreeBlockSize; inline;
|
|
begin
|
|
begin
|
|
@@ -94,7 +94,7 @@
|
|
{$endif DEBUG_TINY_HEAP}
|
|
{$endif DEBUG_TINY_HEAP}
|
|
AllocSize := align(size+sizeof(TTinyHeapMemBlockSize), TinyHeapAllocGranularity);
|
|
AllocSize := align(size+sizeof(TTinyHeapMemBlockSize), TinyHeapAllocGranularity);
|
|
|
|
|
|
- p := TinyHeapBlocks;
|
|
|
|
|
|
+ p := FreeList;
|
|
prev := nil;
|
|
prev := nil;
|
|
while assigned(p) and (DecodeTinyHeapFreeBlockSize(p^.Size) < AllocSize) do
|
|
while assigned(p) and (DecodeTinyHeapFreeBlockSize(p^.Size) < AllocSize) do
|
|
begin
|
|
begin
|
|
@@ -120,14 +120,14 @@
|
|
p2^.Next := p^.Next;
|
|
p2^.Next := p^.Next;
|
|
p2^.Size := EncodeTinyHeapFreeBlockSize(RestSize);
|
|
p2^.Size := EncodeTinyHeapFreeBlockSize(RestSize);
|
|
if prev = nil then
|
|
if prev = nil then
|
|
- TinyHeapBlocks := p2
|
|
|
|
|
|
+ FreeList := p2
|
|
else
|
|
else
|
|
prev^.next := p2;
|
|
prev^.next := p2;
|
|
end
|
|
end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
if prev = nil then
|
|
if prev = nil then
|
|
- TinyHeapBlocks := p^.Next
|
|
|
|
|
|
+ FreeList := p^.Next
|
|
else
|
|
else
|
|
prev^.next := p^.next;
|
|
prev^.next := p^.next;
|
|
end;
|
|
end;
|
|
@@ -170,15 +170,15 @@
|
|
concatenated := false;
|
|
concatenated := false;
|
|
b := addr;
|
|
b := addr;
|
|
|
|
|
|
- b^.Next := TinyHeapBlocks;
|
|
|
|
|
|
+ b^.Next := FreeList;
|
|
b^.Size := EncodeTinyHeapFreeBlockSize(Size);
|
|
b^.Size := EncodeTinyHeapFreeBlockSize(Size);
|
|
EndAddr := pointer(TTinyHeapPointerArithmeticType(addr)+size);
|
|
EndAddr := pointer(TTinyHeapPointerArithmeticType(addr)+size);
|
|
|
|
|
|
- if TinyHeapBlocks = nil then
|
|
|
|
- TinyHeapBlocks := b
|
|
|
|
|
|
+ if FreeList = nil then
|
|
|
|
+ FreeList := b
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- p := TinyHeapBlocks;
|
|
|
|
|
|
+ p := FreeList;
|
|
prev := nil;
|
|
prev := nil;
|
|
|
|
|
|
while assigned(p) do
|
|
while assigned(p) do
|
|
@@ -188,7 +188,7 @@
|
|
addr:=p;
|
|
addr:=p;
|
|
size:=DecodeTinyHeapFreeBlockSize(p^.size)+size;
|
|
size:=DecodeTinyHeapFreeBlockSize(p^.size)+size;
|
|
if prev = nil then
|
|
if prev = nil then
|
|
- TinyHeapBlocks:=p^.next
|
|
|
|
|
|
+ FreeList:=p^.next
|
|
else
|
|
else
|
|
prev^.next:=p^.next;
|
|
prev^.next:=p^.next;
|
|
concatenated:=true;
|
|
concatenated:=true;
|
|
@@ -198,7 +198,7 @@
|
|
begin
|
|
begin
|
|
size:=DecodeTinyHeapFreeBlockSize(p^.size)+size;
|
|
size:=DecodeTinyHeapFreeBlockSize(p^.size)+size;
|
|
if prev = nil then
|
|
if prev = nil then
|
|
- TinyHeapBlocks:=p^.next
|
|
|
|
|
|
+ FreeList:=p^.next
|
|
else
|
|
else
|
|
prev^.next:=p^.next;
|
|
prev^.next:=p^.next;
|
|
concatenated:=true;
|
|
concatenated:=true;
|
|
@@ -211,7 +211,7 @@
|
|
|
|
|
|
if not concatenated then
|
|
if not concatenated then
|
|
begin
|
|
begin
|
|
- p := TinyHeapBlocks;
|
|
|
|
|
|
+ p := FreeList;
|
|
prev := nil;
|
|
prev := nil;
|
|
|
|
|
|
while assigned(p) and (TTinyHeapPointerArithmeticType(p) < TTinyHeapPointerArithmeticType(b)) do
|
|
while assigned(p) and (TTinyHeapPointerArithmeticType(p) < TTinyHeapPointerArithmeticType(b)) do
|
|
@@ -226,7 +226,7 @@
|
|
prev^.Next := b;
|
|
prev^.Next := b;
|
|
end
|
|
end
|
|
else
|
|
else
|
|
- TinyHeapBlocks := b;
|
|
|
|
|
|
+ FreeList := b;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
until not concatenated;
|
|
until not concatenated;
|