We have written a small sample program to help you test memory usage. Our MemoryTestAPIs example provides menu items that call many of the Memory Manager APIs. It allows you to test what happens when certain calls are made to the Memory Manager APIs by tapping, rather than requiring you to write code. Figure 6-3 shows the menus of the application.
There is no sanity checking before calling functions in this code (it is quite intentional!). For example, it doesn’t check to see whether we’ve allocated a handle before locking. The reason for this is so you, as a user, can call the APIs and see what the OS does with different sequences of calls.
Let’s walk through the code for each of the menus in order. We’ll look at the Handle menu and see what tricks we can cause when creating, freeing, locking, and unlocking handles. Next, we will mess about with pointers in FeatureMem menu. The last menu gives you information about the stack.
The code for all the Handle menu items share the following two variables:
static MemHandle gHandle; static MemPtr gPointer;
This code calls
, allocating 1,000 bytes. If the function
NULL, it displays an Alert notifying the
gHandle = MemHandleNew(1000); if (!gHandle) DisplayOutOfMemoryAlert( );
This code ...