mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 12:39:24 +02:00
* tiny optimization to heap manager: implement freeoslist as a fifo (instead of lifo) which should allow more os chunks to keep their fixed size formatting in case of diverse fixed size usage
git-svn-id: trunk@7237 -
This commit is contained in:
parent
9c727d1762
commit
09a60a4019
@ -182,6 +182,7 @@ var
|
|||||||
freelists_fixed : tfreelists;
|
freelists_fixed : tfreelists;
|
||||||
freelist_var : pmemchunk_var;
|
freelist_var : pmemchunk_var;
|
||||||
freeoslist : poschunk;
|
freeoslist : poschunk;
|
||||||
|
freeoslistend : poschunk;
|
||||||
freeoslistcount : dword;
|
freeoslistcount : dword;
|
||||||
|
|
||||||
{$endif HAS_MEMORYMANAGER}
|
{$endif HAS_MEMORYMANAGER}
|
||||||
@ -639,7 +640,10 @@ begin
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
{$endif}
|
{$endif}
|
||||||
poc^.next := freeoslist;
|
if freeoslistend = nil then
|
||||||
|
freeoslistend := poc
|
||||||
|
else
|
||||||
|
freeoslistend^.next := poc;
|
||||||
freeoslist := poc;
|
freeoslist := poc;
|
||||||
inc(freeoslistcount);
|
inc(freeoslistcount);
|
||||||
{$ifdef HAS_SYSOSFREE}
|
{$ifdef HAS_SYSOSFREE}
|
||||||
@ -823,6 +827,8 @@ begin
|
|||||||
freeoslist := poc
|
freeoslist := poc
|
||||||
else
|
else
|
||||||
prev_poc^.next := poc;
|
prev_poc^.next := poc;
|
||||||
|
if poc = nil then
|
||||||
|
freeoslistend := nil;
|
||||||
continue;
|
continue;
|
||||||
end;
|
end;
|
||||||
pocsize := poc^.size and sizemask;
|
pocsize := poc^.size and sizemask;
|
||||||
@ -834,6 +840,8 @@ begin
|
|||||||
freeoslist := poc^.next
|
freeoslist := poc^.next
|
||||||
else
|
else
|
||||||
prev_poc^.next := poc^.next;
|
prev_poc^.next := poc^.next;
|
||||||
|
if poc^.next = nil then
|
||||||
|
freeoslistend := nil;
|
||||||
dec(freeoslistcount);
|
dec(freeoslistcount);
|
||||||
pmc := pmemchunk_fixed(pointer(poc)+fixedfirstoffset);
|
pmc := pmemchunk_fixed(pointer(poc)+fixedfirstoffset);
|
||||||
if pmc^.size <> 0 then
|
if pmc^.size <> 0 then
|
||||||
@ -1390,6 +1398,7 @@ begin
|
|||||||
dec(freeoslistcount);
|
dec(freeoslistcount);
|
||||||
freeoslist:=poc;
|
freeoslist:=poc;
|
||||||
end;
|
end;
|
||||||
|
freeoslistend:=nil;
|
||||||
{$endif HAS_SYSOSFREE}
|
{$endif HAS_SYSOSFREE}
|
||||||
{ release mutex }
|
{ release mutex }
|
||||||
MemoryMutexManager.MutexDone;
|
MemoryMutexManager.MutexDone;
|
||||||
|
Loading…
Reference in New Issue
Block a user