Please note this document does not describe the actual memory map of the TINIm400 module. It only discusses how the C libraries make use of RAM.
The area of RAM starting at address 0 and going up to around 16K consists of the interrupt vector table and a number of system variables (such as root pointers for memory manager and process scheduler structures). It is not declared by any C Library function or any Keil compiler option.
This area of RAM is specified in Keil's Project Target Options, under the heading Off-Chip XDATA Memory. Variables declared in C code that live in XDATA (possibly including local variables, global variables, and function parameters) go in this area of memory. Any array not declared using the mem_malloc function also is drawn from this memory.
This area of RAM is specified in the call to the function init_rom (or if initialization functions are being called individually, the function init_mm). Any memory that is allocated using mem_malloc or mem_dirtymalloc is drawn from this memory pool. Kernel memory is also allocated from this memory.
If the file system is included in an application, its bounds are set by the call to finit.
With the exception of the System variables, these memory areas can be sized and located as required by the application. Note that there is no protection from overlapping these memory segments. However, applications that do overlap these segments will behave unpredictably.