队列和栈的区别
来源:互联网 发布:觉醒 凯特肖邦 知乎 编辑:程序博客网 时间:2024/06/06 04:40
队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。
而栈就像一个箱子,后放的在上边,所以后进先出。
*************************************************************************************************************************************
进程中每个线程都有自己的堆栈,这是一段线程创建时保留下的地址区域。我们的“栈内存”即在此。至于“堆”内存,我个人认为在未用new定义时,堆应该就是未“保留”未“提交”的自由空间,new的功能是在这些自由空间中保留(并提交)出一个地址范围。
栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。在编程中,例如C/C++中,所有的局部变量都是从栈中分配内存空间,实际上也不是什么分配,只是从栈顶向上用就行,在退出函数的时候,只是修改栈指针就可以把栈中的内容销毁,所以速度最快。
堆(Heap)是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程,C/C++分别用malloc/New请求分配Heap,用free/delete销毁内存。由于从操作系统管理的内存分配所以在分配和销毁时都要占用时间,所以用堆的效率低的多!但是堆的好处是可以做的很大,C/C++对分配的Heap是不初始化的。
在Java中除了简单类型(int,char等)都是在堆中分配内存,这也是程序慢的一个主要原因。但是跟C/C++不同,Java中分配Heap内存是自动初始化的。在Java中所有的对象(包括int的wrapper Integer)都是在堆中分配的,但是这个对象的引用却是在Stack中分配。也就是说在建立一个对象时从两个地方都分配内存,在Heap中分配的内存实际建立这个对象,而在Stack中分配的内存只是一个指向这个堆对象的指针(引用)而已。
堆(Heap)是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程,C/C++分别用malloc/New请求分配Heap,用free/delete销毁内存。由于从操作系统管理的内存分配所以在分配和销毁时都要占用时间,所以用堆的效率低的多!但是堆的好处是可以做的很大,C/C++对分配的Heap是不初始化的。
在Java中除了简单类型(int,char等)都是在堆中分配内存,这也是程序慢的一个主要原因。但是跟C/C++不同,Java中分配Heap内存是自动初始化的。在Java中所有的对象(包括int的wrapper Integer)都是在堆中分配的,但是这个对象的引用却是在Stack中分配。也就是说在建立一个对象时从两个地方都分配内存,在Heap中分配的内存实际建立这个对象,而在Stack中分配的内存只是一个指向这个堆对象的指针(引用)而已。
**********************************************************************************************************************************
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行是申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}
********************************************************************************************************************************
栈是先进后出的,但是于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,只要你喜欢。
0 0
- 队列和栈的区别
- 栈和队列的区别
- 栈和队列的区别
- 栈和队列的区别
- 队列和栈的区别
- 栈和队列的区别
- 栈和队列的区别, 栈和堆的区别
- 队列和栈的本质区别
- 堆和栈,队列的区别
- 链表,队列和栈的区别
- 链表、队列和栈的区别
- 队列和栈的本质区别
- 队列 和 栈 的区别 剖析
- 堆、栈和队列的区别
- 队列和堆栈的区别
- 队列、栈的区别
- 数据结构知识:链表,队列和栈的区别
- 数据结构知识:链表,队列和栈的区别
- shell中“>”和“>>”的区别
- learning-urdf-02
- cxf整合spring练习
- Mac安装MySQL
- 题解:Trapping Rain Water
- 队列和栈的区别
- JAVA算法基础 求最大公约数和最小公倍数
- 第十四届浙江省赛 ZOJ 3962~3965 【E,F,G,H】 (其他并不准备补。)
- JavaScript 3.1 补充:谈谈JS的全局变量跟局部变量(转载)
- 关于JavaBean的PropertyChangeListener
- 坚持#第171天~尽己所能、辛德勒、珍惜
- I5 4590 台式机安装黑苹果最新版笔记
- 十三年来,淘宝走过的大数据之路
- 交通车路拥挤预警(LetuAPP)