mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-11 00:03:12 +01:00
* changed formatting to conform to the rest of the compiler/rtl
* fixed SysMaxAvail so it also looks at the free fixed size blocks
This commit is contained in:
parent
75680eaa31
commit
6840bd8ece
@ -502,6 +502,7 @@ end;
|
|||||||
function SysMaxavail: ptrint;
|
function SysMaxavail: ptrint;
|
||||||
var
|
var
|
||||||
pmc : pmemchunk_var;
|
pmc : pmemchunk_var;
|
||||||
|
i: longint;
|
||||||
begin
|
begin
|
||||||
pmc := freelist_var;
|
pmc := freelist_var;
|
||||||
sysmaxavail := 0;
|
sysmaxavail := 0;
|
||||||
@ -511,6 +512,15 @@ begin
|
|||||||
sysmaxavail := pmc^.size;
|
sysmaxavail := pmc^.size;
|
||||||
pmc := pmc^.next_var;
|
pmc := pmc^.next_var;
|
||||||
end;
|
end;
|
||||||
|
if sysmaxavail = 0 then
|
||||||
|
begin
|
||||||
|
for i := maxblockindex downto 1 do
|
||||||
|
if assigned(freelists_fixed[i]) then
|
||||||
|
begin
|
||||||
|
sysmaxavail := i shl blockshr;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -619,7 +629,9 @@ begin
|
|||||||
dec(internal_heapsize, poc^.size);
|
dec(internal_heapsize, poc^.size);
|
||||||
dec(internal_memavail, poc^.size);
|
dec(internal_memavail, poc^.size);
|
||||||
SysOSFree(poc, poc^.size);
|
SysOSFree(poc, poc^.size);
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
{$endif}
|
{$endif}
|
||||||
poc^.prev := nil;
|
poc^.prev := nil;
|
||||||
poc^.next := freeoslist;
|
poc^.next := freeoslist;
|
||||||
@ -711,7 +723,9 @@ begin
|
|||||||
if (mc_right^.size and lastblockflag) <> 0 then
|
if (mc_right^.size and lastblockflag) <> 0 then
|
||||||
begin
|
begin
|
||||||
mc_left^.size := mc_left^.size or lastblockflag;
|
mc_left^.size := mc_left^.size or lastblockflag;
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
// there is a block to the right of the right-block, adjust it's prevsize
|
// there is a block to the right of the right-block, adjust it's prevsize
|
||||||
mc_tmp := pmemchunk_var(pointer(mc_right)+size_right);
|
mc_tmp := pmemchunk_var(pointer(mc_right)+size_right);
|
||||||
mc_tmp^.prevsize := mc_left^.size and sizemask;
|
mc_tmp^.prevsize := mc_left^.size and sizemask;
|
||||||
@ -796,16 +810,16 @@ begin
|
|||||||
result := SysOSAlloc(GrowHeapSizeSmall);
|
result := SysOSAlloc(GrowHeapSizeSmall);
|
||||||
if result<>nil then
|
if result<>nil then
|
||||||
size := GrowHeapSizeSmall;
|
size := GrowHeapSizeSmall;
|
||||||
end else
|
end
|
||||||
{ first try 256K (default) }
|
{ first try 256K (default) }
|
||||||
if size<=GrowHeapSize1 then
|
else if size<=GrowHeapSize1 then
|
||||||
begin
|
begin
|
||||||
result := SysOSAlloc(GrowHeapSize1);
|
result := SysOSAlloc(GrowHeapSize1);
|
||||||
if result<>nil then
|
if result<>nil then
|
||||||
size := GrowHeapSize1;
|
size := GrowHeapSize1;
|
||||||
end else
|
end
|
||||||
{ second try 1024K (default) }
|
{ second try 1024K (default) }
|
||||||
if size<=GrowHeapSize2 then
|
else if size<=GrowHeapSize2 then
|
||||||
begin
|
begin
|
||||||
result := SysOSAlloc(GrowHeapSize2);
|
result := SysOSAlloc(GrowHeapSize2);
|
||||||
if result<>nil then
|
if result<>nil then
|
||||||
@ -850,14 +864,18 @@ begin
|
|||||||
begin
|
begin
|
||||||
pmc := pmemchunk_fixed(pointer(pmc)+chunksize);
|
pmc := pmemchunk_fixed(pointer(pmc)+chunksize);
|
||||||
pmc^.prev_fixed := pointer(pmc)-chunksize;
|
pmc^.prev_fixed := pointer(pmc)-chunksize;
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
until false;
|
until false;
|
||||||
append_to_list_fixed(blockindex, pmc);
|
append_to_list_fixed(blockindex, pmc);
|
||||||
pmc^.prev_fixed := pointer(pmc)-chunksize;
|
pmc^.prev_fixed := pointer(pmc)-chunksize;
|
||||||
freelists_fixed[blockindex] := pmemchunk_fixed(result);
|
freelists_fixed[blockindex] := pmemchunk_fixed(result);
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
pmcv := pmemchunk_var(result);
|
pmcv := pmemchunk_var(result);
|
||||||
append_to_list_var(pmcv);
|
append_to_list_var(pmcv);
|
||||||
pmcv^.size := ((size-sizeof(toschunk)) and sizemask) or (firstblockflag or lastblockflag);
|
pmcv^.size := ((size-sizeof(toschunk)) and sizemask) or (firstblockflag or lastblockflag);
|
||||||
@ -923,7 +941,9 @@ begin
|
|||||||
if pcurr^.size=size then
|
if pcurr^.size=size then
|
||||||
begin
|
begin
|
||||||
break;
|
break;
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
if (pcurr^.size>size) then
|
if (pcurr^.size>size) then
|
||||||
begin
|
begin
|
||||||
if (not assigned(pbest)) or
|
if (not assigned(pbest)) or
|
||||||
@ -982,7 +1002,9 @@ begin
|
|||||||
begin
|
begin
|
||||||
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
||||||
sysgetmem := sysgetmem_fixed(size);
|
sysgetmem := sysgetmem_fixed(size);
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
||||||
sysgetmem := sysgetmem_var(size);
|
sysgetmem := sysgetmem_var(size);
|
||||||
end;
|
end;
|
||||||
@ -1059,7 +1081,9 @@ begin
|
|||||||
if (pcurrsize and fixedsizeflag) = 0 then
|
if (pcurrsize and fixedsizeflag) = 0 then
|
||||||
begin
|
begin
|
||||||
result := sysfreemem_var(pmemchunk_var(p-sizeof(tmemchunk_var_hdr)), pcurrsize and sizemask);
|
result := sysfreemem_var(pmemchunk_var(p-sizeof(tmemchunk_var_hdr)), pcurrsize and sizemask);
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
result := sysfreemem_fixed(pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr)), pcurrsize and fixedsizemask);
|
result := sysfreemem_fixed(pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr)), pcurrsize and fixedsizemask);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1088,7 +1112,9 @@ begin
|
|||||||
begin
|
begin
|
||||||
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
||||||
result := sysfreemem_var(pmemchunk_var(p-sizeof(tmemchunk_var_hdr)), size);
|
result := sysfreemem_var(pmemchunk_var(p-sizeof(tmemchunk_var_hdr)), size);
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
||||||
result := sysfreemem_fixed(pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr)), size);
|
result := sysfreemem_fixed(pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr)), size);
|
||||||
end;
|
end;
|
||||||
@ -1106,7 +1132,9 @@ begin
|
|||||||
begin
|
begin
|
||||||
SysMemSize := SysMemSize and sizemask;
|
SysMemSize := SysMemSize and sizemask;
|
||||||
dec(SysMemSize, sizeof(tmemchunk_var_hdr));
|
dec(SysMemSize, sizeof(tmemchunk_var_hdr));
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
SysMemSize := SysMemSize and fixedsizemask;
|
SysMemSize := SysMemSize and fixedsizemask;
|
||||||
dec(SysMemSize, sizeof(tmemchunk_fixed_hdr));
|
dec(SysMemSize, sizeof(tmemchunk_fixed_hdr));
|
||||||
end;
|
end;
|
||||||
@ -1142,7 +1170,9 @@ begin
|
|||||||
if size <= (maxblocksize - sizeof(tmemchunk_fixed_hdr)) then
|
if size <= (maxblocksize - sizeof(tmemchunk_fixed_hdr)) then
|
||||||
begin
|
begin
|
||||||
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1151,7 +1181,9 @@ begin
|
|||||||
if (pcurrsize and fixedsizeflag) = 0 then
|
if (pcurrsize and fixedsizeflag) = 0 then
|
||||||
begin
|
begin
|
||||||
currsize := pcurrsize and sizemask;
|
currsize := pcurrsize and sizemask;
|
||||||
end else begin
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
currsize := pcurrsize and fixedsizemask;
|
currsize := pcurrsize and fixedsizemask;
|
||||||
end;
|
end;
|
||||||
oldsize := currsize;
|
oldsize := currsize;
|
||||||
@ -1303,7 +1335,11 @@ end;
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.35 2004-06-29 20:50:32 peter
|
Revision 1.36 2004-08-10 18:58:36 jonas
|
||||||
|
* changed formatting to conform to the rest of the compiler/rtl
|
||||||
|
* fixed SysMaxAvail so it also looks at the free fixed size blocks
|
||||||
|
|
||||||
|
Revision 1.35 2004/06/29 20:50:32 peter
|
||||||
* readded support for ReturnIfGrowHeapFails
|
* readded support for ReturnIfGrowHeapFails
|
||||||
|
|
||||||
Revision 1.34 2004/06/27 19:47:27 florian
|
Revision 1.34 2004/06/27 19:47:27 florian
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user