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


    一、内存四区由来

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

    二、内存四区介绍

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

    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 中存储一份

  • 相关阅读:
    微信小程序 24 播放音乐页的完善①
    嵌入式经典面试题
    大模型都在用的:旋转位置编码
    Python eval()和exec()函数
    数字颠倒输出
    Element系列之 keep-alive 中使用 show-overflow-tooltip 切换路由 tooltip 不消失的解决办法
    C++之修改结构体成员字节对齐(二百一十三)
    向毕业妥协系列之机器学习笔记:神经网络(三)Tensorflow实现(上)
    基于.NetCore开发博客项目 StarBlog - (17) 自动下载文章里的外部图片
    srpingboot security demo
  • 原文地址:https://blog.csdn.net/wyifan_/article/details/125557699