堆与栈

转载 2018年04月17日 14:20:07

部分转自https://blog.csdn.net/foreverhuylee/article/details/38978415

堆栈和栈就是一个概念!!!

队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。

而栈就像一个箱子,后放的在上边,所以后进先出。

(堆和它们不同,不存在是先进后出还是先进先出)

堆栈空间分配
        栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
        堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

从变量存储方面来看堆和栈的区别:
        程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中;
        这样说比较准确,所谓的栈其实是由寄存器ebp和esp指向的一片内存空间(ebp指向栈底,esp指向栈顶),原则上是由高地址向低地址生长的一片空间,会保存一些临时的数据,比如一个函数中的临时变量以及返回地址,数据的出入是先进后出,后进先出。
        全局变量实际上是存在一个(一般来说正常的编译器)可读可写的内存空间,这个空间是在你写程序编译好的空间地址(由编译器决定),是固定的。
        堆是由操作系统管理的一片空间,事先是没有在进程空间里分配的(比如你在没有分配堆的时候就访问堆空间会报一个内存访问错误),一般是由程序动态的分配出来,一旦分配了以后,一般需要程序去释放自己的堆空间。

        堆,用于保存new 和malloc这些自定义的内存变量。
        全局静态区用于保存全局变量和静态变量。
        字符常量区,用于保存字符串。

        代码区,用于保存程序的二进制代码。


        队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。

        栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。

        堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行是申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}栈是先进后出的,但是于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,只要你喜欢。



 


堆与栈的区别.txt

  • 2009年03月02日 22:28
  • 7KB
  • 下载

堆与栈的区别

  • 2011年09月29日 23:06
  • 28KB
  • 下载

区别Java中堆与栈区别Java中堆与栈

  • 2010年07月27日 17:30
  • 37KB
  • 下载

堆、列表、队列和栈

堆(Heap): 首先来讲一讲堆的结构,以下图为例。从根结点开始,每个结点可以有左、右两个结点,元素优先将每一层按从左到右的方式填满,即父结点最多有两个子结点,有右子结点就一定会有左子结点,同一层的...
  • Ethan_Apple
  • Ethan_Apple
  • 2017-04-11 17:48:31
  • 2879

常见数据结构(一)-栈,队列,堆,哈希表

本文介绍几种常见的数据结构:栈、队列、堆、哈希表,等等。
  • h3243212
  • h3243212
  • 2016-10-14 00:35:03
  • 5123

为什么栈的速度比堆要快

在栈上分配的内存系统会自动地为其释放,例如在函数结束时,局部变量将不复存在,就是系统自动清除栈内存的结果。但堆中分配的内存则不然:一切由你负责,即使你退出了new表达式的所处的函数或者作用域,那块内存...
  • maochengtao
  • maochengtao
  • 2013-04-23 16:59:59
  • 2287

堆和栈的概念和区别

在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分:       Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存...
  • pt666
  • pt666
  • 2017-04-27 19:06:37
  • 28315

浅谈Java中的栈和堆

1. 前言  一般在刚开始接触“栈”和“堆”这两个概念的时候,很多人都会产生较多的疑问,什么是栈,什么是堆,栈和堆有什么区别?更糟糕的是,数据结构中也有栈和堆这两个概念。在这种情况下,不免会...
  • Fantasy_Lin_
  • Fantasy_Lin_
  • 2016-10-02 10:28:09
  • 1905

栈的效率为什么比堆高?

“堆”和“栈”并不是数据结构上的Heap跟Stack,而是程序运行中的不同内存空间。 那么这就简单了,栈是程序启动的时候,系统分好了给你的,你自己用,系统不干预。 堆是用的时候才向系统申请的,用完...
  • u012282037
  • u012282037
  • 2016-07-27 16:13:10
  • 2022
收藏助手
不良信息举报
您举报文章:堆与栈
举报原因:
原因补充:

(最多只允许输入30个字)