• 【嵌入式】---- 内存四区介绍


    一、内存四区由来

    程序执行是跑在内存中的,而程序中不同的对象(如 指针,局部变量,全局变量,函数参数 等等)要求的生命周期是不同的,所以将这些对象放在不同的区段,这样就赋予了这些对象不同的生命周期,内存四区由此而来。

    二、内存四区介绍

    内存四区分为:栈区,堆区,全局区,代码区。

    1. 栈区(stack)

    栈区由编译器自动分配和释放。

    栈区主要存放函数参数、函数返回值、局部变量。

    2. 堆区(heap)

    堆区由程序员手动分配和释放。如果程序员未释放,在程序运行结束时,由系统释放。

    堆区主要存放由 malloc 关键字申请的内存空间。在C++语言中关键字 new 申请的内存也在堆区。

    3. 全局区

    全局区又叫数据区或者静态区。

    全局区分为三段: data段 、bss段、rodata 段。
    (1).data 段存放已初始化和值不为0的全局变量和静态变量
    (2).bss 段存放未初始化和初始化值为0的全局变量和静态变量。
    (3).rodata 段存放各类常量,如:const、字符串、#define等

    data 段又叫 RW-data 段
    bss 段又叫 ZI-data 段
    rodata 段又叫常量区或只读存储区
    
    • 1
    • 2
    • 3

    4. 代码区(text)

    代码区又叫 code 段 或 text 段。

    用来存放程序代码,由操作系统进行管理,只读。

    三、额外补充

    flash 或者 ROM 掉电后数据还是保存的,保存的数据有 RO-data、RW-data、代码区

    RAM 一般指的就是 sdram,运行速度快,但是掉电数据会丢失,保存的数据有 栈区、堆区、数据区

    注意:
    1,flash 或者 ROM 中为什么不保存 ZI-data?
    ZI-data 段数据未初始化或初始化为0,在启动系统时直接将这块 flash 或者 ROM 清0即可,无需保存。
    2,RW-data 是 RAM 使用的,为什么存储到 flash 或 ROM 中?
    RW-data 这部分变量已经初始化了,只存在RAM中掉电会丢失,所以需要在flash 或 ROM 中存储一份

  • 相关阅读:
    Shiro授权--ssm
    linux软件管家——yum
    2022年前端技术发展趋势
    改进的Salp Swarm优化算法(ISSA)(Matlab代码实现)
    说说C/C++编译的那些事儿
    Docker命令速查
    来用Vite+React快速开发浏览器插件
    使用 EasyCV Mask2Former 轻松实现图像分割
    【JS】判断字符串是否为 url 的方法
    [C++](9)string类的使用:构造|赋值|遍历|容量|修改|字符串|迭代器
  • 原文地址:https://blog.csdn.net/wyifan_/article/details/125557699