The C28x compiler treats memory as two linear blocks of program and data memory:
- Program memory contains executable code, initialization records, and switch tables.
- Data memory contains external variables, static variables, and the system stack.
Blocks of code or data generated by a C/C++ program are placed into contiguous blocks in the appropriate memory space.
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).