内存管理离不开的五个区!
[一]代码区(Text 段 / 代码段)
代码区是进程内存布局里最基础的分区,专门存储程序编译完成后的二进制机器指令,我们编写的各类函数、循环分支、条件判断等全部可执行逻辑,编译后都会存入这片内存程序运行时 CPU 会从代码区读取指令执行,该区域数据只读且在程序生命周期内固定不变,多个进程可共享同一份代码段节省内存,也不会像栈、堆一样动态分配释放,是程序能够正常运行的底层基础。
简单说:所有自定义函数、库函数、程序逻辑的二进制指令,以及所有函数体、if/for/while、运算逻辑,编译后都会存放在代码区。
[二]全局区(Data 段 + BSS 段)
全局区又称静态区,专门存放全局变量与 static 修饰的静态变量。该内存区域会被细分为两个子段:存放已赋值变量的初始化数据段(Data),以及存放未赋值变量的未初始化数据段(BSS)。
简单说:全局、static 静态变量统一存放于全局区,有初始值放 Data 段,无初始值放 BSS 段,程序启动前系统自动把 BSS 内存清零;局部变量加 static 会从栈迁移到全局区,函数退出不销毁,留存上次数值,这就是静态变量能记忆状态的核心原因。
[三]栈区(Stack)
栈区是程序运行最频繁的内存区域,内存由操作系统自动分配、自动回收,全程不需要开发者手动申请与释放,使用门槛低、无内存泄漏风险,是安全性与执行效率都很高的内存分区。
简单说:栈区存放函数局部变量、函数参数、临时变量、函数返回地址,每次函数调用都会开辟专属栈帧,函数执行完毕栈帧直接销毁,变量生命周期完全跟随函数调用流程。
[四]堆区(Heap)
堆区是完全由开发者手动掌控的内存区域,同时也是各类内存问题的高发区域。堆内存需要开发者主动调用接口申请,使用完成后手动释放,操作系统不会自动回收堆内存,全靠代码自行管理。
简单说:堆空间用于存放通过 new/malloc 动态申请的内存、自定义动态对象、动态数组等,其容量大、生命周期灵活,但需要人为手动管理,极易出现内存泄漏、野指针、重复释放等 bug,内存申请与释放操作必须成对匹配。
汽车嵌入式 内存管理 堆栈 嵌入式开发 软件开发
