【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的局部变量只会初始化一次,值为上次函数调用更改的值,生命周期跟随程序
  • 全局变量和静态变量在编译阶段就分配内存了 存在静态存储区
相关推荐
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
youyou-06068 小时前
Classic AUTOSAR 中 CAN 协议栈整体架构
mcu·面试·汽车
神仙别闹8 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员8 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
此时不提桶,更待何时8 小时前
01-04-B-垃圾回收面试与生产事故实战
java·jvm·面试
伞伞悦读8 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
free-elcmacom11 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio
qq_1998868711 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
2601_9669496511 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717611 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g