写在前面我
Keil、IAR构建(Build)窗口中打印的信息:
尺寸:代码=-data=268RW-data=44ZI-data=1028
72 765 字节
3 508 字节
20 202 字节
5 676 字节
926 字节
1 148 字节
相信大家都看过上面的资料,应该知道它们的大概意思了,但是有多少朋友对存储的详细知识有深入的了解呢?
要知道代码、常量、全局和局部变量存放在哪里,需要了解FLASH和RAM的一些特性。在项目中需要分析它们的大小和对应的存储地址纬衡出图管理系统,可以从map文件中分析。
简述其意义Ⅱ
为了大多数人的兴趣,简要说明上述印刷信息的含义。特此提醒大家,网上有很多相关资料Able Fax Tif ,但网上有些资料含糊不清,可能会误导大家,如:RW-data 是一个已初始化的全局变量。修改后的变量称为静态变量,与全局变量仍有区别,但初始化后的静态变量也归类为RW-data。
1.Keil编译窗口信息
尺寸:代码=-data=268RW-data=44ZI-data=1028
代码:指代码的大小;
ro-data:指内联数据(data)以外的常量数据;
RW-data:指可读写(RW),已初始化的变量数据;
ZI-data:指未初始化(ZI)的变量数据;
Code、Ro-data:位于FLASH中;
RW-data、ZI-data:位于RAM中;
提醒: RW-data 的初始化数据会存储在 Flash 中,上电后会从 FLASH 移动到 RAM 中。
关系如下:
RO 大小 = 代码 + RO 数据
RW 大小= RW 数据 + ZI 数据
ROM 大小 = 代码 + RO 数据 + RW 数据
2.IAR 编译窗口信息
IAR有两种情况注册机怎么分配路径,但意思差不多,但显示不同:
编译工程(点击Make),会出现如下信息:
72 765 字节
3 508 字节
20 202 字节
编译单个文件(点击),会出现如下信息(如果没有DATA,则没有行):
5 676 字节
926 字节
1 148 字节
code:代码大小(类似于CODE);
data:常量数据(类似于 CONST);
data:读写可变数据(类似于DATA);
阐明:
IAR 中的数据等价于 Keil 中的 RW Data + ZI Data
内存 (RAM) 分配 III
本节扩展了RAM的一些知识,有助于您了解程序运行时RAM的情况。
内存分为5类:
1、栈:由编译器自动分配和释放,存放函数的参数值、局部变量的值等。
2、堆区(heap):一般由程序员分配和释放(使用free)。如果程序员不释放它,它就会一直被占用。一般来说,微控制器类的程序一般不使用堆。
3、全局区(静态区)():将全局变量和静态变量的存储放在一起,初始化的全局变量和静态变量在同一个区域,未初始化的全局变量和未初始化的静态变量在同一个区域区域。另一个相邻的区域。
4、字面常量区(const):常量字符串放在这里。
5、程序代码区(code):存放函数体的二进制代码。
经典例子:
整数a = 0;全局初始化区
字符 *p1; 全局未初始化区域
主要(无效)
{
诠释 b; // 堆
字符 s[] = "abc"; //堆
字符 *p2; //堆
字符 *p3 = ""; \0";//在常量区CAD迷你编辑器,p3在栈上。
诠释 c = 0; //全局(静态)初始化区
p1 = (char *)(10);
p2 = (char *)(20);
//分配的10和20字节的区域在堆区。
(p1, ""); //\0 放在常量区注册机怎么分配路径,编译器可以优化到一个位置,p3 所指向的""。
}
发表评论