.cinit    storing the initialized global variables and static variables
.const    storing the initialized string constants, global variables, and static variables
.switch   storing the jumping table for big switch structure
.text     storing executable code and float constants
.bss      storing the uninitialized global variables and static variables
.stack    stack
.far      global variables and static variables declared with far
.sysmem   space for malloc, calloc, realloc

each section has "load" and "run". "load" tells the loader or flash writer where to put this section. 
"run" determines where to execute this section. If "run" and "load" are different for one section, 
this section will be copied by the bootloader from the "load" address to the "run" address. Any 
reference to a section means the address of "run". If a section is only read once by the CPU, the "run" 
address can be omitted for saving RAM space, e.g. .cinit is usually read once when booting. Those 
sections need to be quickly read to the CPU should have a "run" address in RAM. The .map file contains 
all link information of the sections (size, load address, run address...).

