1.一直对C语言内存的分布,不太清楚,模模糊糊,查了一些资料,简单叙述下,以后工作中再结合工作看看
一、IAR内存的分布,通过看生成的map文件,分三个段;
1、地址从低到高,先是代码段(有对应的地址),.主要是text(ro code)跟ro data(const只读数据);一般代码段的数据都是存储在内存的rom区,也就是flash区;
2、接下来是数据段,主要是.data(已初始化的全局变量、静态全局、局部变量)、.bss段(未初始化的全局变量或初始化为零的全局变量、静态全局、局部变量);bss段,系统并不会给该段的数据分配空间,只是记录数据所需的空间大小;data段需要占用,内容由程序初始化;一般数据段的数据是存储在内存的ram区;
3、最后是堆栈段,那主要就是堆跟栈,栈stack主要存储局部变量;堆heap手动分配内存;存储在内存的ram区;
二、通过看map文件最后一块,条目列表,主要是两块:
1、函数接口,全局函数、静态函数;全局函数-Code Gb(global);静态函数-Code Lc(local),知道他们的地址;调试程序出错的时候可以跟踪定位下;
2、变量,全局变量、静态变量;全局变量-Data Gb(global);静态变量--Data Lc(local);
2.内存主要是指ram跟rom
通过看.icf文件,可以知道内存的大小,及ram、rom的分配大小还有堆栈的大小跟地址;可以知道ro code、ro data、rw data存储的地址空间;
- 最后
不知道从哪里听说了这么一句话,关于ram跟rom,简单说下,找到之后再拷贝吧,大致意思是:
物理上来说:不清楚内存地址空间的变量,一直是存储在ram上,比如rw
data、bss段;知道具体占用内存空间的是存储在rom,比如text段、ro data;
暂时先写到这里,有其他的,再接着写吧;2021-03-04