博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存的那些事
阅读量:6232 次
发布时间:2019-06-21

本文共 707 字,大约阅读时间需要 2 分钟。

堆(heap)  为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;  程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。  堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问  

 

栈(stack)  为程序保存的一块内存区域,用来保存状态数据,  例如:过程或函数的地址,参数,有时候还包括局部变量。   所以,堆和栈的区别:一个是动态,一个是静态;  堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;  栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。   malloc , new分配的内存就是在堆上的,如果不用free, delete回收,  就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,  回收分配给这个进程的内存等资源。

 

堆和栈的区别:

 

(1)操作系统方面区别:

 

在使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

 

(2)数据结构方面区别:

 

还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足先进后出的性质的数学或数据结构。虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。

 

转载于:https://www.cnblogs.com/CCMMBN/p/9401521.html

你可能感兴趣的文章
VCT-Virtual Cable Test-虚拟电缆检测
查看>>
Java ibatis调用存储过程出现阻塞
查看>>
例解三层交换原理
查看>>
java-第十一章-类的无参方法-实现菜单的级联效果
查看>>
如何检测集群中每台主机的状态
查看>>
时针、分针在一昼夜 24 小时内重合多少次?
查看>>
PHP 5 常量
查看>>
第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析
查看>>
react的style里面不支持important的解决办法
查看>>
JS基本问题
查看>>
我的第一篇博客
查看>>
php版本之殇
查看>>
IDEA 葵花宝典
查看>>
IDEA 问题汇总
查看>>
vmware安装软件包时出错 windows installer返回1613
查看>>
XenDesktop5.x/XenApp6.x访问数据流
查看>>
python 的日志logging模块学习
查看>>
HBase 源码编译错误: RpcServer.java: cannot find symbol
查看>>
zabbix监控中遇到的错误
查看>>
Centos7.5-文件权限管理
查看>>