存储区域

将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载,并在内存中为这些段分配空间。

栈段亦由操作系统分配和管理,而不需要程序员显示地管理;堆段由程序员自己管理,即显示地申请和释放空间。

进程使用的内存按功能划分,从高地址到低地址:
栈区:stack

存放函数的参数值、局部变量的值,以及在进行任务切换时存放当前任务的上下文内容。

栈区上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。

其特点是效率高,但内存大小有限。
堆区:heap 动态内存分配

malloc分配的内存区域,其生命周期由free决定。
全局区 ,即静态存储区,存储全局变量和静态变量。

(初始化分配于数据段,未初始化分配于BSS区)
数据段:data segment

存放已初始化的全局变量、静态变量(已初始化全局静态变量,局部静态变量)、常量数据。
BSS段:Block Started by Symbol 未初始化数据段。未初始化全局变量、未初始化静态变量。

数据段属于静态内存分配,可以分为只读数据段和读写数据段。字符串常量等一般都是放在只读数据段中。
代码区:code/text segment 存放CPU执行的机器指令,字符串常量。

储程序代码指令,define定义的常量。

动态分配内存可能发生的问题:

主要有三种类型:内存泄露、内存碎片和内存崩溃

内存崩溃是内存使用最严重的结果,主要原因有数组访问越界、写已经释放的内存、指针计算错误、访问堆栈地址越界等等。碎片收集的问题,变量的持行时间等。

相关推荐
未来之窗软件服务3 小时前
计算机二级[英文]-C 字符串移动—东方仙盟
c语言·开发语言·仙盟创梦ide·东方仙盟
是隼人8 小时前
buuctf-pwn bypwn(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
T1mzhou9 小时前
ARM64 Linux 6.10内核启动流程6-psci.c和ATF/U-Boot 的电源接口
linux·服务器·c语言
是隼人9 小时前
buuctf-pwn PWN2(整数溢出)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
LuminousCPP10 小时前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法
竞赛考级题库10 小时前
202606 青少年等级考试C/C++真题一级 建议答题时长:60min
java·c语言·c++
迷茫、Peanut10 小时前
C语言混合链接
c语言
wdfk_prog10 小时前
RT-Thread Kconfig 配置明明是 y,为什么 rtconfig.h 就是不生成?一次 `_PATH` 后缀踩坑复盘
c语言
是隼人11 小时前
buuctf-pwn jarvisoj_level5(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
Suxing912 小时前
C语言基础分享:C语言文件操作:从“写日记”到“拍电影”的存盘指南
c语言·开发语言