Dynamic Memory Allocation

Memory is allocated in chunks, which can be either relocatable (the Memory Manager can move them), or nonrelocatable (they can never move). Since there’s no virtual memory, and since the amount of memory is limited, it’s important to avoid fragmenting available memory.

Tip

Fragmenting means having free memory interspersed with allocated memory so that although there may be enough free memory available to satisfy a particular memory allocation, it isn’t contiguous, and therefore the memory allocation fails.

The Palm OS Memory Manager provides a mechanism for fighting fragmentation: relocatable blocks. When you allocate a relocatable block, you allow the Memory Manager to move that block as necessary to coalesce free memory blocks into contiguous space (see Figure 6-2). Of course, there may be times that you don’t want the memory block to be moved. In such cases, you can lock the block. This tells the Memory Manager not to move it until it is unlocked.

The Memory Manager can shuffle unlocked relocatable blocks as necessary
Figure 6-2. The Memory Manager can shuffle unlocked relocatable blocks as necessary

Using Memory Handles

Since the address of the memory block can move, the Memory Manager doesn’t return a pointer on allocation. Instead, it returns something called a handle . The handle itself doesn’t directly contain the address, instead, you call a Memory Manager routine to lock the handle; it returns the address of the ...

Get Palm OS Programming, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.