变量分为: 局部变量和全局变量
局部变量: 函数体内部定义的变量, 作用域为函数内部, static 声明 (静态局部变量) 该变量则函数调用结束后不消失而保留值, 分配的存储空间不释放.
全局变量: 函数体外部定义的变量, 作用域为文件内部, static 声明 (静态全局变量) 该变量则只能在本文件 (声明该变量的文件) 中被调用.
变量声明分为: 定义性声明 (int a) 需要分配存储空间; 引用性声明 (extern int a) 不需要分配存储空间
内存区域划分:
1, 栈区: 由高地址向低地址增长, 由 CPU 硬件实现, 用于存放局部变量, 函数形参(自右向左入栈), 函数调用时的现场保护和返回地址, 由编译器自动分配和释放
2, 堆区: 由低地址向高地址增长, 由软件实现, 用于动态内存分配(malloc 和 free 等)
3, 静态存储区: 存放全局变量和静态变量(全局区), 存放常量字符串(文字常量区)
4, 程序代码区: 存放函数二进制代码
MAP 文件相关概念:
1,Section: 描述映像文件的代码和数据块
2,RO:Read-Only 缩写, 包括 RO-data(只读常量)和 RO-code(只读代码)
3,RW:Read-Write 缩写, 主要是 RW-data, 已初始化变量
4,ZI:Zero-Initialized 缩写, 主要是 ZI-data, 未初始化变量
5,.text: 等同 RO-code
6,.constdata: 等同 RO-data
7,.bss: 等同 ZI-data
8,.data: 等同 RW-data
烧写时 FLASH 占用空间 Code+RO-data+RW-data
运行时 RAM 占用空间 RW-data+ZI-data;
htm 文件可以查看被调用函数的栈 stack 使用情况, 调试和 OS 中分配任务 stack 时有用
---------------------
作者: Arthur_LH
来源: http://www.bubuko.com/infodetail-2988560.html