当前位置: 首页 > news >正文

【C语言】复习~动态内存管理

如果你已经对C语言略知一二,现在正在复习C语言的一些重点知识

-------------------------------------------------------------------------------------------------------------------------

关注我🌈,每天更新总结文章(多以图文形式,方便记忆,均为网上搜集资料以及AI)⭐

-------------------------------------------------------------------------------------------------------------------------

时间:2025/5/22/15:30分

-----------------------------------

快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区


目录

动态内存管理

1.为什么存在动态内存分配

2.动态内存函数的介绍

          mallo

          free

          calloc 

          realloc

3.常见的动态内存错误

4.几个经典的笔试题

5.内存空间 | 栈和堆


1.为什么存在动态内存分配(关于内存空间 | 栈和堆 在后面会讲)

  •  我们最基础掌握的内存开辟方式有
  • 但是上述的空间开辟方式有两个特点

2.动态内存函数的介绍

    malloc

   free

  calloc

  realloc

3.常见的动态内存错误

4.几个经典的笔试题

5.内存空间 | 栈和堆

程序内存
├─ **代码段(Text Segment/Code Segment)**
│  ├─ 存储编译后的可执行代码(机器指令)
│  ├─ 只读属性(防止程序意外修改代码)
│  └─ 共享属性(多个进程可共享同一代码段)
├─ **数据段(Data Segment)**
│  ├─ **初始化数据段(Initialized Data Segment)**
│  │  ├─ 存储已初始化的全局变量和静态变量
│  │  ├─ 分为:
│  │  │  ├─ 只读数据(如 `const` 全局变量,通常单独存放于只读数据段)
│  │  │  └─ 可写数据(如普通全局变量)
│  └─ **未初始化数据段(BSS Segment)**
│     ├─ 存储未初始化的全局变量和静态变量
│     ├─ 程序加载时自动初始化为 0 或空指针
│     └─ 不占用可执行文件空间(仅记录变量名称和大小)
├─ **堆(Heap)**
│  ├─ 动态内存分配区域(运行时通过 `malloc/new` 申请)
│  ├─ 由程序员手动管理分配和释放(需避免内存泄漏)
│  └─ 内存分配方向:从低地址向高地址增长
├─ **栈(Stack)**
│  ├─ 存储函数调用栈帧(局部变量、函数参数、返回地址等)
│  ├─ 由编译器自动管理(函数调用/返回时自动分配/释放)
│  └─ 内存分配方向:从高地址向低地址增长
├─ **只读数据段(Read-Only Data Segment)**
│  ├─ 存储只读数据(如 `const` 全局变量、字符串字面量)
│  └─ 程序运行时不可修改
└─ **其他特殊段(可选)**
   ├─ 符号表(Symbol Table):存储符号信息(调试用)
   ├─ 重定位表(Relocation Table):程序加载时地址修正
   └─ 动态链接段(Dynamic Link Segment):存储动态链接信息

  • 关于static(变为静态变量)
  • 加了static的全局变量只能在本文件内使用
  • 加了static的局部变量只会初始化一次,值为上次函数调用更改的值,生命周期跟随程序
  • 全局变量和静态变量在编译阶段就分配内存了 存在静态存储区

相关文章:

  • python线性回归
  • 国标GB28181设备管理软件EasyGBS视频监控系统打造工厂可视化监管场景解决方案
  • HTML应用指南:利用POST请求获取全国中通快递服务网点位置信息
  • 使用Python复制Word文档样式并生成新文档
  • 【调优】Java 调优学习笔记之字符串
  • Python unittest
  • ProtoBuffer在Android端的编译
  • 若依代码生成
  • 一文读懂GRPC
  • STM32之温湿度传感器(DHT11)
  • python 实现 web 请求与相应
  • NIFI的处理器:RouteOnContent 1.28.1
  • 车载软件架构 --- FLASH bootloader 设计要点
  • Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代
  • Nginx核心功能
  • 【朝花夕拾】S32K144 backdoor key解锁后劳德巴赫或者JLINK更新app
  • GraphRAG使用
  • Java集合再探
  • 3452. 好数字之和
  • Java 模块化系统(JPMS)
  • 百度怎么自己做网站/百度搜索引擎排名
  • 厦门网站建设seo/网站建设平台
  • 网站是做后台好还是做前台好/网站关键词优化软件效果
  • 防城港网站建设/2023年最新新闻简短摘抄
  • 德国诺莫斯手表网站/沈阳今日新闻头条
  • wap网站 开发/房产网站建设