* New heapmanager that releases memory back to the OS, donated

by Micha Nelissen
This commit is contained in:
peter 2004-06-17 16:16:13 +00:00
parent 785d22af8d
commit 2ed14823c5
13 changed files with 865 additions and 718 deletions

View File

@ -176,6 +176,15 @@ begin
Sbrk:=nil;
end;
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{ include standard heap management }
{$I heap.inc}
@ -541,7 +550,11 @@ begin
end.
{
$Log$
Revision 1.12 2004-04-22 21:10:56 peter
Revision 1.13 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.12 2004/04/22 21:10:56 peter
* do_read/do_write addr argument changed to pointer
Revision 1.11 2004/01/20 23:09:14 hajny

View File

@ -108,6 +108,23 @@ end;
{ OS independant parts}
{$I system.inc}
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{ OS dependant parts }
{$I errno.inc}
@ -185,7 +202,11 @@ End.
{
$Log$
Revision 1.14 2004-01-22 13:46:14 marco
Revision 1.15 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.14 2004/01/22 13:46:14 marco
bsd
Revision 1.13 2004/01/20 23:09:14 hajny

View File

@ -931,6 +931,22 @@ asm
{$endif}
end;
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{ include standard heap management }
{$I heap.inc}
@ -1607,7 +1623,11 @@ Begin
End.
{
$Log$
Revision 1.35 2004-05-16 18:51:20 peter
Revision 1.36 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.35 2004/05/16 18:51:20 peter
* use thandle in do_*
Revision 1.34 2004/04/22 21:10:56 peter

File diff suppressed because it is too large Load Diff

View File

@ -42,11 +42,16 @@ procedure SetMemoryMutexManager(var MutexMgr: TMemoryMutexManager);
{ Variables }
const
growheapsizesmall : ptrint=32*1024; { fixed-size small blocks will grow with 32k }
growheapsize1 : ptrint=256*1024; { < 256k will grow with 256k }
growheapsize2 : ptrint=1024*1024; { > 256k will grow with 1m }
ReturnNilIfGrowHeapFails : boolean = false;
{ the following variable is needed for heaptrc/win32 }
{$ifdef WIN32}
var
heaporg,heapptr,heapend,heaperror,freelist : pointer;
HeapOrg: pointer;
{$endif}
{ Default MemoryManager functions }
Function SysGetmem(Size:ptrint):Pointer;
@ -95,7 +100,11 @@ Procedure AsmFreemem(var p:pointer);
{
$Log$
Revision 1.8 2004-03-15 21:48:26 peter
Revision 1.9 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.8 2004/03/15 21:48:26 peter
* cmem moved to rtl
* longint replaced with ptrint in heapmanagers

View File

@ -721,7 +721,6 @@ var
{$ifdef win32}
var
StartUpHeapEnd : pointer;
{ I found no symbol for start of text section :(
so we usee the _mainCRTStartup which should be
in wprt0.ow or wdllprt0.ow PM }
@ -1019,9 +1018,6 @@ begin
{$ifdef go32v2}
Heap_at_init:=HeapPtr;
{$endif}
{$ifdef win32}
StartupHeapEnd:=HeapEnd;
{$endif}
end;
@ -1156,7 +1152,11 @@ finalization
end.
{
$Log$
Revision 1.29 2004-05-22 20:35:52 peter
Revision 1.30 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.29 2004/05/22 20:35:52 peter
check whether bp is in the stack value allocated by the main program
Revision 1.28 2004/04/28 20:48:20 peter

View File

@ -101,6 +101,22 @@ function fpgetcwd(buf:pchar;_size:size_t):pchar; cdecl; external name 'getcwd';
{$I ossysc.inc} // base syscalls
{$I osmain.inc} // base wrappers *nix RTL (derivatives)
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{ more OS independant parts}
{$I text.inc}
@ -174,7 +190,11 @@ End.
{
$Log$
Revision 1.14 2004-01-20 23:09:14 hajny
Revision 1.15 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.14 2004/01/20 23:09:14 hajny
* ExecuteProcess fixes, ProcessID and ThreadID added
Revision 1.13 2004/01/01 14:16:55 marco

View File

@ -641,6 +641,22 @@ end;
function Sbrk(logicalSize: Longint): Mac_Ptr ;
external 'InterfaceLib' name 'NewPtr'; {Directly mapped to NewPtr}
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{ include standard heap management }
{$I heap.inc}
@ -1168,7 +1184,11 @@ end.
{
$Log$
Revision 1.15 2004-05-11 18:05:41 olle
Revision 1.16 2004-06-17 16:16:13 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.15 2004/05/11 18:05:41 olle
+ added call to MaxApplZone to have the whole MacOS heap available
Revision 1.14 2004/04/29 11:27:36 olle

View File

@ -716,6 +716,22 @@ begin
Sbrk:=AllocPooled(MOS_heapPool,size);
end;
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{$I heap.inc}
@ -1162,7 +1178,11 @@ end.
{
$Log$
Revision 1.13 2004-06-13 22:50:47 karoly
Revision 1.14 2004-06-17 16:16:14 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.13 2004/06/13 22:50:47 karoly
* cleanup and changes to use new includes
Revision 1.12 2004/06/06 23:31:13 karoly

View File

@ -307,6 +307,22 @@ begin
end;
end;
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{ include standard heap management }
{$I heap.inc}
@ -819,7 +835,11 @@ Begin
End.
{
$Log$
Revision 1.21 2004-01-20 23:11:20 hajny
Revision 1.22 2004-06-17 16:16:14 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.21 2004/01/20 23:11:20 hajny
* ExecuteProcess fixes, ProcessID and ThreadID added
Revision 1.20 2003/10/25 23:43:59 hajny

View File

@ -143,6 +143,24 @@ begin
Sbrk:=nil;
end;
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
// If the OS is capable of freeing memory, define HAS_SYSOSFREE and implement
// the SysOSFree function properly
//{$define HAS_SYSOSFREE}
{
procedure SysOSFree(p: pointer; size: ptrint);
begin
// code to release memory block
end;
}
{ include standard heap management }
{$I heap.inc}
@ -298,7 +316,11 @@ Begin
End.
{
$Log$
Revision 1.10 2004-01-20 23:12:49 hajny
Revision 1.11 2004-06-17 16:16:14 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.10 2004/01/20 23:12:49 hajny
* ExecuteProcess fixes, ProcessID and ThreadID added
Revision 1.9 2003/09/27 11:52:36 peter

View File

@ -864,6 +864,22 @@ asm
{$endif}
end;
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := sbrk(size);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
fpmunmap(p, size);
end;
{ include standard heap management }
{$include heap.inc}
@ -1537,7 +1553,11 @@ End.
{
$Log$
Revision 1.13 2004-04-22 21:10:56 peter
Revision 1.14 2004-06-17 16:16:14 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.13 2004/04/22 21:10:56 peter
* do_read/do_write addr argument changed to pointer
Revision 1.12 2004/01/20 23:12:49 hajny

View File

@ -257,6 +257,8 @@ end;
stdcall;external 'kernel32' name 'GetProcessHeap';
function HeapAlloc(hHeap : DWord; dwFlags : DWord; dwBytes : DWord) : Longint;
stdcall;external 'kernel32' name 'HeapAlloc';
function HeapFree(hHeap : dword; dwFlags : dword; lpMem: pointer) : boolean;
stdcall;external 'kernel32' name 'HeapFree';
{$IFDEF SYSTEMDEBUG}
function WinAPIHeapSize(hHeap : DWord; dwFlags : DWord; ptr : Pointer) : DWord;
stdcall;external 'kernel32' name 'HeapSize';
@ -279,18 +281,29 @@ asm
movl intern_HEAPSIZE,%eax
end ['EAX'];
{*****************************************************************************
OS Memory allocation / deallocation
****************************************************************************}
function Sbrk(size : longint):pointer;
function SysOSAlloc(size: ptrint): pointer;
var
l : longword;
begin
l := HeapAlloc(GetProcessHeap(), 0, size);
l := HeapAlloc(GetProcessHeap, 0, size);
{$ifdef DUMPGROW}
Writeln('new heap part at $',hexstr(l,8), ' size = ',WinAPIHeapSize(GetProcessHeap()));
{$endif}
sbrk:=pointer(l);
SysOSAlloc := pointer(l);
end;
{$define HAS_SYSOSFREE}
procedure SysOSFree(p: pointer; size: ptrint);
begin
HeapFree(GetProcessHeap, 0, p);
end;
{ include standard heap management }
{$I heap.inc}
@ -1590,6 +1603,7 @@ begin
MainInstance:=HInstance;
cmdshow:=startupinfo.wshowwindow;
{ Setup heap }
HeapOrg:=GetHeapStart;
InitHeap;
SysInitExceptions;
SysInitStdIO;
@ -1608,7 +1622,11 @@ end.
{
$Log$
Revision 1.56 2004-05-16 18:51:20 peter
Revision 1.57 2004-06-17 16:16:14 peter
* New heapmanager that releases memory back to the OS, donated
by Micha Nelissen
Revision 1.56 2004/05/16 18:51:20 peter
* use thandle in do_*
Revision 1.55 2004/04/22 21:10:56 peter