Legacy Documentclose button

Important: The information in this document is obsolete and should not be used for new development.

Previous Book Contents Book Index Next

Inside Macintosh: Memory /
Chapter 1 - Introduction to Memory Management


Summary of Memory Management

Pascal Summary

Data Types

TYPE
   SignedByte           = -128..127;      {arbitrary byte of memory}
   Byte                 = 0..255;         {unsigned, arbitrary byte}
   Ptr                  = ^SignedByte;    {pointer to nonrelocatable block}
   Handle               = ^Ptr;           {handle to relocatable block}

   ProcPtr              = Ptr;            {procedure pointer}

   Size                 = LongInt;        {size, in bytes, of block}

Memory Management Routines

Setting Up the Application Heap

PROCEDURE MaxApplZone;
PROCEDURE MoreMasters;
FUNCTION GetApplLimit		: Ptr;
PROCEDURE SetApplLimit		(zoneLimit: Ptr);

Allocating and Releasing Relocatable Blocks of Memory

FUNCTION NewHandle		(logicalSize: Size): Handle;
FUNCTION NewHandleClear		(logicalSize: Size): Handle;
PROCEDURE DisposeHandle		(h: Handle);

Allocating and Releasing Nonrelocatable Blocks of Memory

FUNCTION NewPtr			(logicalSize: Size): Ptr;
FUNCTION NewPtrClear		(logicalSize: Size): Ptr;
PROCEDURE DisposePtr		(p: Ptr);

Setting the Properties of Relocatable Blocks

FUNCTION HGetState		(h: Handle): SignedByte;
PROCEDURE HSetState		(h: Handle; flags: SignedByte);
PROCEDURE HLock			(h: Handle);
PROCEDURE HUnlock		(h: Handle);
PROCEDURE HPurge		(h: Handle);
PROCEDURE HNoPurge		(h: Handle);

Managing Relocatable Blocks

PROCEDURE EmptyHandle		(h: Handle);
PROCEDURE ReallocateHandle	(h: Handle; logicalSize: Size);
PROCEDURE ReserveMem		(cbNeeded: Size);
PROCEDURE MoveHHi		(h: Handle);
PROCEDURE HLockHi		(h: Handle);

Manipulating Blocks of Memory

PROCEDURE BlockMove		(sourcePtr, destPtr: Ptr; byteCount: Size);

Assessing Memory Conditions

PROCEDURE PurgeSpace		(VAR total: LongInt; VAR contig: LongInt);
FUNCTION MemError		: OSErr;

Grow-Zone Operations

PROCEDURE SetGrowZone		(growZone: ProcPtr);
FUNCTION GZSaveHnd		: Handle;

Setting and Restoring the A5 Register

FUNCTION SetCurrentA5		: LongInt;
FUNCTION SetA5			(newA5: LongInt) : LongInt;

Application-Defined Routines

Grow-Zone Functions

FUNCTION MyGrowZone		(cbNeeded: Size): LongInt;

C Summary

Data Types

typedef char SignedByte;               /*arbitrary byte of memory*/
typedef unsigned char Byte;            /*unsigned, arbitrary byte*/
typedef char *Ptr;                     /*pointer to nonrelocatable block*/
typedef Ptr *Handle;                   /*handle to relocatable block*/
typedef long (*ProcPtr)();             /*procedure pointer*/
typedef long Size;                     /*size in bytes of block*/

Memory Management Routines

Setting Up the Application Heap

pascal void MaxApplZone		(void);
pascal void MoreMasters		(void);
#define GetApplLimit() 		(* (Ptr*) 0x0130)
pascal void SetApplLimit	(void *zoneLimit);

Allocating and Releasing Relocatable Blocks of Memory

pascal Handle NewHandle		(Size byteCount);
pascal Handle NewHandleClear	(Size byteCount);
pascal void DisposeHandle	(Handle h);

Allocating and Releasing Nonrelocatable Blocks of Memory

pascal Ptr NewPtr		(Size byteCount);
pascal Ptr NewPtrClear		(Size byteCount);
pascal void DisposePtr		(Ptr p);

Setting the Properties of Relocatable Blocks

pascal char HGetState		(Handle h);
pascal void HSetState		(Handle h, char flags);
pascal void HLock		(Handle h);
pascal void HUnlock		(Handle h);
pascal void HPurge		(Handle h);
pascal void HNoPurge		(Handle h);

Managing Relocatable Blocks

pascal void EmptyHandle		(Handle h);
pascal void ReallocateHandle	(Handle h, Size byteCount);
pascal void ReserveMem		(Size cbNeeded);
pascal void MoveHHi		(Handle h);
pascal void HLockHi		(Handle h);

Manipulating Blocks of Memory

pascal void BlockMove		(const void *srcPtr, void *destPtr, 
				Size byteCount);

Assessing Memory Conditions

pascal void PurgeSpace		(long *total, long *contig);
#define MemError()		(* (OSErr*) 0x0220)

Grow-Zone Operations

pascal void SetGrowZone		(GrowZoneProcPtr growZone);
#define GZSaveHnd()		(* (Handle*) 0x0328)

Setting and Restoring the A5 Register

long SetCurrentA5		(void);
long SetA5			(long newA5);

Application-Defined Routines

Grow-Zone Functions

pascal long MyGrowZone		(Size cbNeeded);

Assembly-Language Summary

Global Variables
ApplLimitlongThe application heap limit, beyond which the heap cannot expand.
ApplZonelongA pointer to the original application heap zone.
BufPtrlongAddress of highest byte of allocatable memory.
CurrentA5longAddress of the boundary between the application global variables and the application parameters of the current application.
GZRootHndlongA handle to a block that the grow-zone function must not move.

Result Codes
noErr0No error
paramErr-50Error in parameter list
memROZErr-99Heap zone is read-only
memFullErr-108Not enough memory
nilHandleErr-109NIL master pointer
memWZErr-111Attempt to operate on a free block
memPurErr-112Attempt to purge a locked block
memBCErr-115Block check failed
memLockedErr-117Block is locked


Previous Book Contents Book Index Next

© Apple Computer, Inc.
3 JUL 1996