The Palm OS contains support for multiple numbered memory cards, in which each card can hold RAM and/or ROM. Every Palm OS device contains an internal card, with number 0, containing both RAM and ROM. The Handspring devices support an external ROM card (actually Flash), with number 1.
The Memory Manager doesn’t store raw addresses to refer to memory chunks, but instead stores the offset of the chunk relative to the beginning of the card. Such an offset is called a local ID. By storing items this way, the base address of the card can change without requiring any changes to the structure of the heap.
This flexibility isn’t used currently (and, in fact, probably never will be), since it’s not possible to move a card to a different base address. You can imagine, however, a device with multiple card slots, where the base address of a card would depend on into which slot it was inserted. This flexibility is there and is reflected in some APIs. You’ll rarely need to know about cards and local IDs. We only brought it up because we thought it was important to explain the rationale behind the APIs requiring card numbers and local IDs.
Given a card number and a local ID, you can obtain the associated address. You can also go the other way, breaking apart a pointer to a chunk to a card number and local ID.
Here is a list of APIs:
LocalID MemHandleToLocalID(MemHandle h)
This returns the local ID to the chunk referred to by
LocalIDKind MemLocalIDKind(LocalID ...