Important: The information in this document is obsolete and should not be used for new development.
Figures, Tables, and Listings
Preface About This Book xiChapter 1 Introduction to Memory Management 1-1
Figure 1-1 Memory organization with several applications open 1-5
Figure 1-2 Organization of an application partition 1-7
Figure 1-3 The application stack 1-9
Figure 1-4 A fragmented heap 1-10
Figure 1-5 A compacted heap 1-11
Figure 1-6 Organization of an application's A5 world 1-12
Figure 1-7 Using temporary memory allocated from unused RAM 1-14
Figure 1-8 A pointer to a nonrelocatable block 1-17
Figure 1-9 A handle to a relocatable block 1-19
Figure 1-10 Purging and reallocating a relocatable block 1-22
Figure 1-11 Allocating a nonrelocatable block 1-23
Figure 1-12 An effectively partitioned heap 1-26
Listing 1-1 Locking a block to avoid dangling pointers 1-30
Listing 1-2 Creating a fake handle 1-35
Listing 1-3 Increasing the amount of space allocated for the stack 1-40
Listing 1-4 Setting up your application heap and stack 1-42
Listing 1-5 Determining whether allocating memory would deplete the memory cushion 1-43
Listing 1-6 Allocating relocatable blocks 1-44
Listing 1-7 Allocating nonrelocatable blocks 1-45
Listing 1-8 Allocating a dialog record 1-45
Listing 1-9 Creating an emergency memory reserve 1-46
Listing 1-10 Checking the emergency memory reserve 1-47
Listing 1-11 Determining whether allocating memory would deplete the memory cushion 1-47
Listing 1-12 Reallocating the emergency memory reserve 1-48
Listing 1-13 A grow-zone function that releases emergency storage 1-49
Listing 2-1 Reading the value of a system global variable 2-8
Listing 2-2 Changing the value of a system global variable 2-9
Listing 2-3 Determining whether temporary-memory routines are available 2-12
Listing 2-4 Calling a procedure by address 2-13
Listing 2-5 Creating a subzone of the original application heap zone 2-15
Listing 2-6 A purge-warning procedure 2-17
Listing 2-7 Installing a purge-warning procedure 2-18
Listing 2-8 A purge-warning procedure that calls the Resource Manager's procedure 2-19
Figure 2-1 A block header in a 24-bit zone 2-22
Figure 2-2 A block header in a 32-bit zone 2-23
Chapter 3 Virtual Memory Manager 3-1
Figure 3-1 24-bit Memory Manager logical address space 3-6
Figure 3-2 32-bit Memory Manager logical address space 3-8
Figure 3-3 The physical address space on a Macintosh IIci with 8 MB of RAM 3-10
Listing 3-1 Translating logical to physical addresses 3-19
Chapter 4 Memory Management Utilities 4-1
Figure 4-1 The Memory control panel 4-4
Table 4-1 Caches available in MC680x0 microprocessors 4-9
Figure 4-2 Initializing a status code 4-11
Figure 4-3 Reading stale data 4-12
Figure 4-4 Reading invalid instructions 4-13
Listing 4-1 A sample grow-zone function 4-15
Listing 4-2 Passing A5 to a notification response procedure 4-16
Listing 4-3 Setting up and restoring the A5 register at interrupt time 4-17
Listing 4-4 Structure of the QuickDraw global variables 4-18
Listing 4-5 Copying the QuickDraw global variables into a record 4-19
Listing 4-6 A control's draw routine using the calling application's QuickDraw patterns 4-19
Listing 4-7 Stripping the program counter 4-21
Listing 4-8 Stripping addresses in time-critical code 4-23
Listing 4-9 Calculating the StripAddress mask 4-23
Listing 4-10 Translating 24-bit to 32-bit addresses 4-24