A method and apparatus for managing heap memory for an application program in a data processing system. The system supports a basic addressing mode and an extended addressing mode. Programs operating in the basic addressing mode are limited to addressing using a first number of bits, program operating in the extended addressing mode are limited to addressing using a second number of bits, and the first number of bits is less than the second number of bits. One or more heap banks are established for an application program, with each heap bank having a quantity of memory space that is addressable by the program operating in basic addressing mode. The heap banks are managed by a system program operating in extended addressing mode. In response to each request from the application program that requires a quantity of memory space, one of the heap banks is selected for allocating the memory. An additional heap bank is established if none of the heap banks has a quantity of available memory space that satisfies the required quantity.
A method and system in accordance with the present invention comprises a thread stack/thread heap combination, wherein the thread heap is for thread local memory usage and wherein the thread stack and thread heap grow in opposite directions. In the present invention the thread specific heap is allocated next to the thread's stack and grows in the opposite direction from that of the stack. This improvement allows the current space management of thread stacks, which spread out the memory placement of multiple stacks to avoid collision, to also be used for the heaps without additional overhead or complexity. It also allows the existing growth scheme of adding memory pages to the process for the stack to be used again because the growth is simply in the opposite direction. Thread specific heaps eliminate the need for expensive synchronization when allocating from a shared heap in a multiprocessor environment.