mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-21 20:09:40 +02:00
+ implemented MemAvail and MaxAvail for the win16 global heap
git-svn-id: trunk@37691 -
This commit is contained in:
parent
52f81da69c
commit
46db6a6174
@ -390,6 +390,57 @@ circular linked list.
|
|||||||
p := result;
|
p := result;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function MemAvail: LongInt;
|
||||||
|
var
|
||||||
|
CurBlock: Word;
|
||||||
|
CurBlockP: PGlobalHeapBlockHeader;
|
||||||
|
CurSubBlock: PFreeSubBlock;
|
||||||
|
begin
|
||||||
|
result:=GetFreeSpace(0);
|
||||||
|
CurBlock:=HeapList;
|
||||||
|
if CurBlock=0 then
|
||||||
|
exit;
|
||||||
|
repeat
|
||||||
|
CurBlockP:=Ptr(CurBlock,0);
|
||||||
|
CurSubBlock:=Ptr(CurBlock,CurBlockP^.FirstFreeOfs);
|
||||||
|
while Ofs(CurSubBlock^)<>0 do
|
||||||
|
begin
|
||||||
|
if CurSubBlock^.Size>2 then
|
||||||
|
Inc(result,CurSubBlock^.Size-2);
|
||||||
|
CurSubBlock:=Ptr(CurBlock,CurSubBlock^.Next);
|
||||||
|
end;
|
||||||
|
CurBlock:=CurBlockP^.NextBlockSeg;
|
||||||
|
until CurBlock=HeapList;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function MaxAvail: LongInt;
|
||||||
|
var
|
||||||
|
CurBlock: Word;
|
||||||
|
CurBlockP: PGlobalHeapBlockHeader;
|
||||||
|
CurSubBlock: PFreeSubBlock;
|
||||||
|
begin
|
||||||
|
result:=GlobalCompact(0);
|
||||||
|
if result>(65536-SizeOf(TGlobalHeapBlockHeader)-2) then
|
||||||
|
exit;
|
||||||
|
CurBlock:=HeapList;
|
||||||
|
if CurBlock=0 then
|
||||||
|
exit;
|
||||||
|
repeat
|
||||||
|
CurBlockP:=Ptr(CurBlock,0);
|
||||||
|
if CurBlockP^.TotalFreeSpaceInBlock>(result+2) then
|
||||||
|
begin
|
||||||
|
CurSubBlock:=Ptr(CurBlock,CurBlockP^.FirstFreeOfs);
|
||||||
|
while Ofs(CurSubBlock^)<>0 do
|
||||||
|
begin
|
||||||
|
if CurSubBlock^.Size>(result+2) then
|
||||||
|
result:=CurSubBlock^.Size-2;
|
||||||
|
CurSubBlock:=Ptr(CurBlock,CurSubBlock^.Next);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
CurBlock:=CurBlockP^.NextBlockSeg;
|
||||||
|
until CurBlock=HeapList;
|
||||||
|
end;
|
||||||
|
|
||||||
const
|
const
|
||||||
GlobalHeapMemoryManager: TMemoryManager = (
|
GlobalHeapMemoryManager: TMemoryManager = (
|
||||||
NeedLock: false; // Obsolete
|
NeedLock: false; // Obsolete
|
||||||
|
@ -21,3 +21,6 @@
|
|||||||
HeapLimit: Word=1024;
|
HeapLimit: Word=1024;
|
||||||
HeapBlock: Word=8192;
|
HeapBlock: Word=8192;
|
||||||
HeapAllocFlags: Word=2; { 2=GMEM_MOVEABLE }
|
HeapAllocFlags: Word=2; { 2=GMEM_MOVEABLE }
|
||||||
|
|
||||||
|
function MemAvail: LongInt;
|
||||||
|
function MaxAvail: LongInt;
|
||||||
|
Loading…
Reference in New Issue
Block a user