* 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:
micha 2007-05-02 05:20:44 +00:00
parent 9c727d1762
commit 09a60a4019

View File

@ -182,6 +182,7 @@ var
freelists_fixed : tfreelists;
freelist_var : pmemchunk_var;
freeoslist : poschunk;
freeoslistend : poschunk;
freeoslistcount : dword;
{$endif HAS_MEMORYMANAGER}
@ -639,7 +640,10 @@ begin
else
begin
{$endif}
poc^.next := freeoslist;
if freeoslistend = nil then
freeoslistend := poc
else
freeoslistend^.next := poc;
freeoslist := poc;
inc(freeoslistcount);
{$ifdef HAS_SYSOSFREE}
@ -823,6 +827,8 @@ begin
freeoslist := poc
else
prev_poc^.next := poc;
if poc = nil then
freeoslistend := nil;
continue;
end;
pocsize := poc^.size and sizemask;
@ -834,6 +840,8 @@ begin
freeoslist := poc^.next
else
prev_poc^.next := poc^.next;
if poc^.next = nil then
freeoslistend := nil;
dec(freeoslistcount);
pmc := pmemchunk_fixed(pointer(poc)+fixedfirstoffset);
if pmc^.size <> 0 then
@ -1390,6 +1398,7 @@ begin
dec(freeoslistcount);
freeoslist:=poc;
end;
freeoslistend:=nil;
{$endif HAS_SYSOSFREE}
{ release mutex }
MemoryMutexManager.MutexDone;