队列、堆、栈、堆栈的区别?
来源:互联网 发布:手机html软件 编辑:程序博客网 时间:2024/04/28 18:33
队列、堆、栈、堆栈的区别?
队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。
而栈就像一个箱子,后放的在上边,所以后进先出。
*************************************************************************************************************************************
进程中每个线程都有自己的堆栈,这是一段线程创建时保留下的地址区域。我们的“栈内存”即在此。至于“堆”内存,我个人认为在未用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中分配的内存只是一个指向这个堆对象的指针(引用)而已。
**********************************************************************************************************************************
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行是申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}
********************************************************************************************************************************
栈是先进后出的,但是于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,只要你喜欢。
注:转载自CSDN博客:http://blog.csdn.net/pkuyjxu/article/details/6325236#comments,原文地址不详
原文中 “栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性”这句话有问题,FIFO即先入先出,而栈是先入后出
0 0
- 队列、堆、栈、堆栈的区别?
- 队列、堆、栈、堆栈的区别?
- 队列、堆、栈、堆栈的区别?
- 堆 , 栈 ,队列, 堆栈的区别
- 队列、堆、栈、堆栈的区别?
- 队列、堆、栈、堆栈的区别
- 栈,堆,队列,堆栈的区别
- 堆”,"栈","堆栈","队列",它们的区别?
- 什么是“堆”,"栈","堆栈","队列",它们的区别?
- 什么是“堆”,"栈","堆栈","队列",它们的区别?
- 堆”,"栈","堆栈","队列"的区别(转)
- 什么是“堆”,"栈","堆栈","队列",它们的区别?
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 网站开发多语言切换思路
- 【tomcat】There are no resources that can be added or removed from the server
- ognl.NoSuchPropertyException: com.opensymphony.xwork2.validator.validators.RegexFieldValidator.expre
- 2016年我的总结
- 使用pscp实现Windows 和 Linux服务器间远程拷贝文件
- 队列、堆、栈、堆栈的区别?
- C++ 排序算法(1)---冒泡,选择,插入
- python-Logging之进程安全的ConcurrentLogHandler
- Simple Dynamic Strings(SDS)源码解析和使用说明一
- ios MJRefresh 下拉刷新后没办法完全恢复Normal 状态
- 针对开发者的20款移动开发框架
- [react-router] `props.history` and `context.history` are deprecated. Please use `context.router`.
- ”centos 6.8“ ”samba“ “安装”
- liferay项目Jersey生成rest接口方法