1)对于烧录在单片机里面的程序,程序的代码段,data段,bss段,rodata段等都存放在单片机的Flash中。当单片机上电后,初始化汇编代码将data段,bss段,复制到单片机的RAM中,并建立好堆栈,开始调用程序的main函数。以后,便有了程序存储器和数据存储器之分,程序运行时从Flash(即指令存储器,代码存储器)中读取指令 ,从RAM中读取与写入数据。
2)RAM->存放data段,bss段,堆栈段;
ROM->存放代码段(code 段)与只读数据段(rodata段);
3)bss段的理解:(Block Started By Symbol)通常是指用来存放程序未初始化的全局变量和静态变量的一块内存区域,特点是可读写的;在程序执行之前bss段会自动清零,所以未初始化的全局变量与静态变量在程序执行之前就已经初始化为0了。
注:bss段与data段的区别:bss段存放的是未初始化的全局变量与静态变量;data段存放的是初始化后的全局变量与静态变量;
4)rodata段的理解:rodata段存放的是程序只读数据,一般是程序里面的只读变量(如const修饰的变量)与字符串常量。单独设立".rodata"段有很多好处,不光是在语义上支持const字,操作系统加载时可以将".rodata"段的属性设置为只读,保证了程序的安全。