• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
11
计算机基础

栈和堆

发表于 2022-04-11 • 字数统计 1248 • 被 1,538 人看爆

概述

是程序用来存储数据的两个内存区域

栈

栈是一个内存数组,是一个LIFO(Last-In First-Out,先进先出)的数据结构。
由系统自动分配释放

栈数据结构

数据类型

栈存储的数据类型

  • 某些类型变量的值
  • 程序当前的执行环境
  • 传递给方法的参数

例

int b;
char s[] = "abc";
char *p2;

栈特征

  • 数据只能从栈的顶端插入和删除
  • 把数据放到栈顶称为入栈(push)
  • 从栈顶删除数据称为出栈(pop)

栈的内存

内存地址由高到底,后定义的变量地址低于先定义的变量
如上面代码,b的地址小于s的地址,b在s的下面

栈的特征.png

堆

堆一块内存区域,在堆中可以分配大块的内存用于存储某类型的数据对象,栈内存能够以任意顺序存入和移除。
由开发人员分配和释放,若开发人员不主动释放,则程序结束由系统回收。
分配方式类似链表

例

//C中使用malloc()函数申请
char *p1 = (char *)malloc(10);

//free()函数释放
free(p1);

//C++中用new运算符申请
char *p2 = new char[10];

//用delete运算符释放
delete[] p2;

栈的内存

堆的内存地址与栈相反,由低到高,需要注意的是,后申请的内存空间不一定在先申请的内存后面

垃圾回收

堆里保存的数据,不能显示的删除它们,由垃圾收集器(GarbageCollector GC)来判断是否还在使用,自动清除无用的堆对象

堆垃圾自动清理.png

参考

  • 恋喵大鲤鱼-一文读懂堆与栈的区别
  • 假如子弹换成糖果-栈和堆的区别
分享到:
值类型和引用类型
散列表查找
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,092次看爆
  • JAVA_HOME环境配置问题 3,741次看爆
  • AssetBundle使用 3,510次看爆
  • VSCode配置C++开发环境 3,264次看爆
  • Lua反射 3,142次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图