栈与堆对比图
左侧展示栈(整齐的书架),右侧展示堆(杂乱的仓库),说明两者在内存管理上的本质差异
栈(Stack)
像一摞整齐的托盘
add(a, b)
← 最新调用,在顶部
calculate()
调用了 add()
main()
程序入口
(空闲空间)
(空闲空间)
(空闲空间)
后进
先出
堆(Heap)
像一间大仓库
用户对象
动态创建
切片 / 数组
map
哈希表
接口值
编译期大小不确定
闭包捕获的变量
生命周期延长
已回收
碎片
大对象(>32KB)
直接从 mheap 分配
碎片
channel 缓冲区
运行时分配
自动分配/释放
速度极快,无 GC 压力
手动或 GC 管理
灵活,但需要垃圾回收