The C6000 compiler treats memory as a single linear block that is partitioned into subblocks of code and data. Each subblock of code or data generated by a C program is placed in its own continuous memory space. The compiler assumes that a full 32-bit address space is available in target memory.
Note:
The Linker Defines the Memory Map: The linker, not the compiler, defines the
memory map and allocates code and data into target memory. The compiler assumes
nothing about the types of memory available, about any locations not available for
code or data (holes), or about any locations reserved for I/O or control purposes.
The compiler produces relocatable code that allows the linker to allocate code and
data into the appropriate memory spaces. For example, you can use the linker to
allocate global variables into on-chip RAM or to allocate executable code into
external ROM. You can allocate each block of code or data individually into memory,
but this is not a general practice (an exception to this is memory-mapped I/O,
although you can access physical memory locations with C/C++ pointer types).