首页 > 系统相关 >变量及内存分配

变量及内存分配

时间:2023-02-11 22:24:25浏览次数:44  
标签:RW 变量 静态 section RAM 程序 内存 分配 view

参考资料:

1.狄泰软件学院的C语言教程

2.《armlink_user_guide》、《ARM® Developer Suite Compilers and Libraries Guide》、《ARM® Developer Suite Linker and Utilities Guide》

3.https://blog.csdn.net/xingqingly/article/details/120260398

4.https://blog.csdn.net/weixin_42328389/article/details/120622384

5.https://blog.csdn.net/weixin_43624808/article/details/87007392

本文主要回答之前的疑问:关于STM32选型时需要注意的参数Flash和RAM大小

程序有两个状态

  1.可执行文件,属于静态概念,这种情况下,程序处于ROM中;

  2.正在执行的程序,属于动态概念,这种情况下,会将静态程序中的部分内容加载到RAM中。

上述两个状态,在ARM中称作Load view和Execution view。

Load view下:只是用ROM中,静态程序由RO section和RW section组成

Execution view:使用了RAM和ROM,其中ROM中的内容不变,静态程序的RW section要加载到RAM中,并同时会引入ZI section.

 

 

 Load view称作加载域,Execution view称作运行域。加载域就是程序在Flash中的实际存储,而运行域是芯片上电后的运行状态。

下面对RO section、RW section和ZI section做相关阐述:

RO section:由.text段和.constdata段(.rodata段)组成;

RW section:由.data段组成

ZI section:由.bss段、栈、堆组成

.bss段:存放未初始化的全局变量和静态变量

.text段:存放程序中的可执行代码

.data段:存放初始化的全局变量和静态变量

.constdata段(.rodata段):存放程序中的常量值

栈:存放程序临时创建的局部变量,由系统自动分配和释放

堆:用于内存的动态申请和归还

 所以程序所需的Flash和RAM大小的计算公式为

  Flash = RO section + RW section = .text段 + .constdata段 + .data段

  RAM = RW section + ZI section = .data段 + .bss段 + 栈 + 堆

后续待增加的内容:

栈:栈是向下生长的。当有变量入栈,栈顶指针的值减小;

  栈在程序中,用于维护函数调用的上下文

堆:堆是向上生长的。先申请的堆变量,存储在低地址单元。

  堆主要用于内存的动态申请和归还。

标签:RW,变量,静态,section,RAM,程序,内存,分配,view
From: https://www.cnblogs.com/xing-2/p/17112476.html

相关文章