当前位置: 首页 > 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的局部变量只会初始化一次,值为上次函数调用更改的值,生命周期跟随程序
  • 全局变量和静态变量在编译阶段就分配内存了 存在静态存储区

http://www.xdnf.cn/news/596557.html

相关文章:

  • LRU (Least Recently Used) 页面置换算法
  • 征程 6 J6E/M linear 双int16量化支持替代方案
  • 什么是云主机?
  • 使用行为分析和深度证据集群实时检测内部威胁
  • deepwiki-open开源项目分析
  • CVE-2022-22947源码分析与漏洞复现
  • 堆的C语言实现
  • 认识CPU (三):数据通路——CPU的煎饼物流系统
  • 汇舟问卷:国外问卷调查如何闭坑
  • 并发编程实战--对象的共享
  • java每日精进 5.22【多数据源(读写分离)、事务】
  • 01_springCloud基础知识
  • 并发编程之线程基础
  • 『VUE』vue-quill-editor 添加超链接的同时为文字添加颜色(详细图文注释)
  • 有动画效果,但动画窗格里为空
  • 红黑树插入的旋转变色
  • Python |GIF 解析与构建(1):初步解析
  • SOC-ESP32S3部分:7-如何学习ESP32S3-IDF开发
  • Katoolin3 项目介绍:在 Ubuntu 上轻松安装 Kali Linux 工具
  • 【题解-洛谷】P9644 [SNCPC2019] Turn It Off
  • 1.2V超低功耗晶振:物联网设备续航提升的秘密武器
  • ThreadLocal底层原理解析
  • 比较结构的连通性
  • MySQL多线程备份工具mysqlpump详解!
  • 骰子游戏(2023睿抗省赛)
  • C++函数封装和绑定
  • 硬件,软件和进程
  • 过氧化物酶的邻近标记技术(APEX):最灵敏的蛋白互作方法
  • Python生成物理引擎的简单知识图谱
  • SOC-ESP32S3部分:6-任务看门狗