Important: The information in this document is obsolete and should not be used for new development.
NewHandle
You can use theNewHandlefunction to allocate a relocatable memory block of a specified size.
FUNCTION NewHandle (logicalSize: Size): Handle;
logicalSize- The requested size (in bytes) of the relocatable block.
DESCRIPTION
TheNewHandlefunction attempts to allocate a new relocatable block in the current heap zone with a logical size oflogicalSizebytes and then return a handle to the block. The new block is unlocked and unpurgeable. IfNewHandlecannot allocate a block of the requested size, it returnsNIL.
The
- WARNING
- Do not try to manufacture your own handles without this function by simply assigning the address of a variable of type
Ptrto a variable of typeHandle. The resulting "fake handle" would not reference a relocatable block and could cause a system crash.![]()
NewHandlefunction pursues all available avenues to create a block of the requested size, including compacting the heap zone, increasing its size, and purging blocks from it. If all of these techniques fail and the heap zone has a grow-zone function installed,NewHandlecalls the function. ThenNewHandletries again to free the necessary amount of memory, once more compacting and purging the heap zone if necessary. If memory still cannot be allocated,NewHandlecalls the grow-zone function again, unless that function had returned 0, in which caseNewHandlegives up and returnsNIL.SPECIAL CONSIDERATIONS
BecauseNewHandleallocates memory, you should not call it at interrupt time.ASSEMBLY-LANGUAGE INFORMATION
The registers on entry and exit forNewHandleare
Registers on entry A0 Number of logical bytes requested
Registers on exit A0 Address of the new block's master pointer or NILD0 Result code If you want to clear the bytes of a block of memory to 0 when you allocate it with the
NewHandlefunction, set bit 9 of the routine trap word. You can usually do this by supplying the wordCLEARas the second argument to the routine macro, as follows:
_NewHandle ,CLEARRESULT CODES
noErr 0 No error memFullErr -108 Not enough memory in heap zone SEE ALSO
If you allocate a relocatable block that you plan to lock for long periods of time, you can prevent heap fragmentation by allocating the block as low as possible in the heap zone. To do this, see the description of theReserveMemprocedure on page 1-70.If you plan to lock a relocatable block for short periods of time, you might want to move it to the top of the heap zone to prevent heap fragmentation. For more information, see the description of the
MoveHHiprocedure on page 1-71.