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.
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.
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 ...