堆内存与栈内存

堆内存与栈内存

·3 分钟阅读·939 字

程序运行时堆内存(Heap)与栈内存(Stack)的核心区别:管理方式、存储内容、访问速度、典型场景对比

📋 目录

堆内存与栈内存

堆内存(Heap)与栈内存(Stack)是程序运行时两种核心的内存区域,二者在内存管理、用途、性能上存在本质区别。


一、核心区别对比

对比维度栈内存(Stack)堆内存(Heap)
管理方式系统自动分配和释放(函数调用结束自动回收)程序员手动分配释放(new/delete),或依赖 GC
存储内容局部变量、函数参数、返回地址动态对象、数组、大尺寸数据
数据结构后进先出(LIFO),地址连续无固定顺序,地址不连续(类似链表)
访问速度极快(栈指针直接定位)🐢 较慢(指针间接访问,可能触发碎片整理)
大小限制固定(系统预分配,通常 几 MB动态(可扩展,受物理内存限制,可很大

二、典型使用场景

栈内存

int add(int a, int b) {
    int sum = a + b;   // a, b, sum 均存储在栈中
    return sum;        // 函数结束,自动释放
}

堆内存

// Java: 对象存储在堆中,GC 自动回收
int[] arr = new int[1000];   // 大数组 → 堆
User user = new User();      // 对象 → 堆
// C++: 需手动释放
int* p = new int[1000];     // 堆分配
delete[] p;                 // 必须手动释放

三、运维视角的意义

场景关联
OOM 排查堆内存泄漏是 Java 应用 OOM 的主要原因
容器内存限制JVM 堆大小配置影响 Pod 内存 limits
性能调优栈溢出(StackOverflow)→ 递归过深;堆碎片 → GC 频繁

关联文档 -Shell · Python — 编程学习主页

  • ../linux/system/Linux — 系统内存管理
  • ../gpu-computing/GPU 计算与 CUDA 编程基础 — GPU 显存管理类似堆内存