C 语言里的堆与栈:内存到底是怎么分的
来源:dev.to — 2026-09-27
📋 概述
作者从 JavaScript 和 Node.js 转去学 C 时,最先撞上的问题就是内存:查了几篇资料之后他得到一个基本认识——C 的内存分成两块,栈和堆。栈像一张列表,短命的变量、函数和参数住在里面,完全由编译器管理:函数被调用时变量压入,函数结束时内存自动释放;因为分配是顺序进行的所以非常快,但空间有限,申请一大块数据就会撞上栈溢出。堆则像一片巨大的数据池,是没有结构的内存块,专门用于动态分配:要用 malloc 或 calloc 申请,用完必须手动释放,否则就是内存泄漏;它比栈慢一些,因为分配前得先找地方。
🔑 核心要点
- 栈由编译器管理、顺序分配,快到几乎免费,但空间有限,大数组容易触发栈溢出。
- 堆是有意设计的非结构化内存池,用 malloc/calloc 申请、必须手动 free,否则就是内存泄漏。
- 堆比栈慢的根因不是硬件,而是分配前必须先去寻找可用的空间。
- 从 JS 转 C 的第一道关卡就是这套显式的内存责任:语言不再替你兜底。
💡 金句
栈像一张列表,短命的变量住在里面;堆像一片巨大的池子,你得自己记得把水放掉。
👍 0
👎 0
← 返回 dev.to 首页