什么是栈与堆:内存模型的关键区别
副标题 / 摘要 栈与堆是两种常见的内存分配模型。本文解释它们在生命周期、分配成本与适用场景上的差异。 目标读者 想理解内存模型的开发者 需要优化性能与内存的工程师 学习语言底层机制的同学 背景 / 动机 很多性能问题来自对内存模型的误解。 理解栈与堆能帮助你写出更稳定、更高效的代码。 核心概念 栈(Stack):函数调用时自动分配,LIFO 堆(Heap):运行期动态分配,需要显式释放或 GC 生命周期:栈随作用域结束自动释放 实践指南 / 步骤 局部临时数据优先放栈 需要跨作用域共享的对象放堆 避免频繁堆分配 关注 GC 或释放成本 在性能关键路径上减少堆对象 可运行示例 #include <stdio.h> #include <stdlib.h> int main(void) { int a = 10; // 栈上 int *p = malloc(sizeof(int)); // 堆上 *p = 20; printf("%d %d\n", a, *p); free(p); return 0; } 解释与原理 栈分配快、释放自动,但生命周期短。 堆分配更灵活,但成本高且需要额外管理(GC 或 free)。 常见问题与注意事项 栈一定更快吗? 一般更快,但栈空间有限。 堆对象一定要手动释放吗? 取决于语言,有 GC 的语言会自动回收。 栈溢出是什么? 递归过深或局部变量过大导致栈空间耗尽。 最佳实践与建议 频繁创建对象时考虑对象池 对大对象避免放在栈上 监控 GC 压力与分配热点 小结 / 结论 栈与堆的差异决定了性能与内存管理策略。 理解内存模型是写出稳定系统的基础。 ...