两种存储器,三种内存大小,六段段 1. 两种存储器 FLASH Flash Memory(闪速存储器)是一种安全、快速的存储体,具有体积小、容量大、成本低、掉电不丢失等一系列优点,已成为嵌入式系统中数据和程序最主要的载体。 Flash是,即在物理结构上分成若干个物理块,区块之间相互独立。 Flash写操作必须,Flash只能将数据位由1写成0,不能从0写成1,所以在对存储器写之前必须先执行擦除操作,擦操作的最小单位是一个区块,而不是一个字节。 RAM RAM(Random Access Memory)又称随机存取存储器,也叫内存,是与CPU直接交换数据的内部存储器。速度很快,断电RAM不保留数据。 RAM主要用来存储程序中用到的全局变量、堆栈等。 2. 三种存储区 map中三种内存 编译完工程会生成一个.map 的文件,该文件的最后说明了ROM和RAM占用空间大小,如下图所示:
其中ROM就是程序烧录到FLASH中的大小,RW就是占用RAM大小. RO RO (Read Only ): 只读区域, 需要长久保存,烧录到Flash中,下文的text段和constdata段属于此属性区 RW RW (Read Write): 可读可写,通常为全局变量和静态变量,下文中的.data段和.bss属于RW区 ZI ZI (Zero Init): 没有进行初始化或者初始化为0,系统上电时会主动把此区域数据进行0初始化,下文的.bss段就是. 另外, 可翻看Keil工具编译的map文件,Heap和Stack区也进行了Zero的属性标注, 因此,Heap和Stack也可认为是ZI区域 ROM与RAM数据比较 数据段说明RAMROM.bss–truefalse.datatruetrueRO-data常量falsetrue.text–falsetruestack局部变量等truefalseheapmalloctruefalse 3. 六段段
.text .text代码段: 用来放程序代码(code), 在代码编译完成后, 长久只读存放于此,属于图中的 .constdata .constdata只读常量数据段: const限定的数据类型存放在此,属于图中的 .data 用来存放初始化不为0的全局变量(global)和静态变量(static),它是可读可写的,属于图中的 .bss .bss的英文是,翻译过来就是。此部分类似于数据部分,只是它不占用可执行文件中的空间。 bss通常是指用来存放程序中的一块内存区域,可读可写,属于图中的,如果变量未初始化,系统会将变量初始化为0 heap heap堆区: 通常我们说的动态内存分配,使用malloc/free进行申请和释放,属于动态存储区. stack stack栈区: 在代码执行时用来保存函数的局部变量和参数,属于动态存储区. 原文链接:两种存储器,三种内存大小,六段段
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/26390.html