单片机的内存分配(变量的存储位置)详解
对于初学者而言,对单片机的内存分配往往最让人头疼,很多人学了单片机几年 都不知道单片机内部的内存使用情况是如何分配的。要了解 ROM(flash)、RAM(sram)启动,首先 需要对 链接器 Linker 如何分配内存有一定的了解。
通常,对于栈生长方向向下的单片机,其内存一般模型是:
一个进程运行时,所占用的内存,可以分为如下几个部分:
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
4、文字常量:常量字符串就是放在这里的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中,程序结束后由系统自动释放
5、程序代码(code):存放函数体的二进制代码。
同时,单片机内存被总分为flash(rom)和sram(ram),flash里面的数据掉电可保存,sram中的数据掉电就丢失,sram的执行速度要快于flash,flash容量大于sram
上方的最低内存地址,最高地址,都是在flash和sram中
我们正常下载程序都是下载存储进flash里面,这也是为什么断电可保存的原因
单片机的程序存储分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区) 和 ZI-data(零初始化数据区)
- Flash 存储 code和RO-data
- Sram 存储 RW-data 和ZI-data
在使用MDK编译时可以看到
Code为程序代码部分 = 程序代码区(code)
RO-data 表示 程序定义的常量 = 文字常量区
RW-data 表示 已初始化的全局变量 = 栈区(stack)堆区(heap)全局区(静态区)(static)
ZI-data 表示 未初始化的全局变量
部分参考自:http://blog.chinaunix.net/uid-15473693-id-388637.html
单片机的内存分配(变量的存储位置)详解相关推荐
- Mysql存储引擎详解(MyISAM与InnoDB的区别)
Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...
- mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解
前言 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的. 而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也 ...
- kubernetes系列10—存储卷详解
kubernetes系列10-存储卷详解 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kub ...
- Kubernetes K8S之存储Volume详解
K8S之存储Volume概述与说明,并详解常用Volume示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- 数据结构图,图存储结构详解
1. 数据结构的图存储结构 我们知道,数据之间的关系有 3 种,分别是 "一对一"."一对多" 和 "多对多",前两种关系的数据可分别用线性 ...
- linux内存管理机制以及free命令详解
linux内存管理机制以及free命令详解 一.linux内存管理机制 1.物理内存和虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存 ...
- python内存的回收机制_python的内存管理和垃圾回收机制详解
简单来说python的内存管理机制有三种 1)引用计数 2)垃圾回收 3)内存池 接下来我们来详细讲解这三种管理机制 1,引用计数: 引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用 ...
- 嵌入式单片机基础篇(一)之stm32F1GPIO详解
嵌入式单片机基础篇(一)之stm32F1GPIO详解 stm32F1GPIO详解 下面以stm32f103zet6以及51单片机为例,讲解单片机最基本部分IO口 第一部分:stm32 STM32 的 ...
- 浏览器对象存储数据详解
浏览器对象存储数据详解 前言 随着需求的发展,浏览器的功能正变的越来越强大,在本地存储数据可以极大的方便人们进行各种操作,如localStroage/sessionStroage等,下面我就记录在项目 ...
最新文章
- elastichd安装部署
- Python之黏包的解决
- 计算机学院大学生程序设计竞赛(2015’11)1007 油菜花王国
- linux长期版本维护内容,[图]Linux Kernel 4.20首个维护版本更新发布 已稳定可广泛部署...
- python2.7_1.13_编写一个SNTP客户端
- python json 不好用_Python之json使用
- 【MPS最佳实践】媒体工作流转码
- 11.高性能MySQL --- 可扩展MySQL
- 工频干扰频谱测量_力参数传感器的电阻应变测量系统
- 局域网访问PHP项目网站 用IP地址进入
- 局域网传文件_超好用的文件传输工具!
- 小米9008授权账号_小米AI音箱APP的秘密
- Excel如何将二维表转成数据列
- 友盟统计前台页面图表或文字的隐藏方法
- UGUI_03_补充之_Image的属性(image type这个属性simple、Sliced、tiled、filled样式详解)
- Unity Scroll View在Clamped模式下无法移动
- (1)安装Arch系统 - 树莓派Raspberry Pi - Arch Linux(转载)
- python图片修改过、有原图、怎么得到改动的地方_python--修改证件照的大小
- 程序设计思维 C - 班长竞选 (强连通分量、kosaraju算法)
- 软碟通系统U盘制作教程
热门文章
- mysql myisam写入性能_(转)innodb 与 myisam 读写性能分析
- django解决NameError: name ‘_mysql‘ is not defined 或 mysqlclient 1.4.0 or newer is required报错
- 聚类方法学习(三)亲和力传播算法AP
- selenium使用浏览器隐私模式加载网站
- Numpy数据分析数值范围调整、计算
- linux open函数解释,linux之open函数解析
- 【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆
- [刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence
- Codeforces Round #256 (Div. 2)
- 两个数据库表同步的可视化WEB同步程序