计算机内存中的堆和栈

计算机内存的堆(Heap)栈(Stack)

栈(Stack)

栈是系统自动管理 的一块内存区域,特点是后进先出(LIFO)

  • 存放内容:局部变量、函数参数、返回地址等
  • 分配方式:编译器自动分配和释放
  • 大小:通常较小(一般几 MB)
  • 速度:非常快,因为只是移动栈顶指针

比如你写一个函数:

cpp 复制代码
void foo() {
    int a = 10;      // a 分配在栈上
    char s[20];      // s 也分配在栈上
}

函数执行完毕后,as 会被自动释放

堆(Heap)

堆是程序员手动管理的一块内存区域,大小不固定。

  • 存放内容:动态分配的内存
  • 分配方式 :程序员用 new/malloc 申请,用 delete/free 释放
  • 大小:较大(可达 GB 级别)
  • 速度:比栈慢,因为需要查找空闲内存块

比如:

cpp 复制代码
int *p = new int(10);   // 在堆上分配一个 int
delete p;                // 手动释放

如果忘了 delete,就会造成内存泄漏

对比总结

特性 栈(Stack) 堆(Heap)
管理方式 编译器自动管理 程序员手动管理
分配速度 很快 较慢
大小 较小(几 MB) 较大(可达 GB)
存放内容 局部变量、函数参数 动态分配的数据
释放时机 函数结束自动释放 必须手动释放
碎片问题 频繁分配释放会产生碎片
cpp 复制代码
string s;        // s 对象本身在栈上
cin >> s;        // s 内部的数据可能分配在堆上

string 这个变量本身在栈上,但它内部存储的字符串数据通常是在堆上动态分配的,这也是为什么 string 可以灵活地存储任意长度的字符串。

相关推荐
间歇性努力持续性发呆的野生快乐选手2 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
码工许师傅3 小时前
一文读懂《Effective C++ 第三版》的55条黄金法则
c++
ao-weilai3 小时前
C++基础:C++11部分内容
开发语言·c++·c++11
有点。3 小时前
C++深度优先搜索(三)
开发语言·c++·深度优先
程序喵大人3 小时前
【C++进阶】STL算法与函数对象 -【C++进阶】STL算法与函数对象
开发语言·c++·算法
我不会插花弄玉3 小时前
10.list【由浅入深-C++】
数据结构·c++·list
星轨初途4 小时前
LeetCode 热题 100——day6 三数之和
数据结构·c++·算法·leetcode·职场和发展
旖旎夜光4 小时前
C++(类与对象)(下)
开发语言·c++·学习
江屿风4 小时前
【科普】【差集&交集概念落地云相册】流食般投喂
开发语言·c++·笔记·算法·云相册