`
一振风
  • 浏览: 2380 次
社区版块
存档分类
最新评论

堆和栈的几点区别

阅读更多
堆和栈一直分得不太清楚,所以今天决定整理一下

   结构:
    栈(stack)又名堆栈,它是一种先进后出(FILO)的线性表。
    特点:容量小 速度快 适合存放小型数据 如 基本数据类型和对象类型的引用

    堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。常见的堆有二叉堆、斐波那契堆等。
   堆的特点和栈相反 :  因此适合存放对象本身

   功能作用比较:
   从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的.

JAVA中运行机制:
   与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
   堆内存用来存放由new 创建的对象和数组,由GC回收内存。分配和销毁时都要占用时间,因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。
   Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
  最后附一张简单堆和栈区分的图片:
 
  • 大小: 32.2 KB
分享到:
评论

相关推荐

    堆和栈详解

    在深入探讨这两个概念之前,我们需要明确一点:堆和栈在内存结构上有着本质的区别。 栈(Stack)是一种线性数据结构,其特点是后进先出(Last In First Out, LIFO)。在程序执行时,系统会为每个线程分配一个栈,...

    堆和栈的区别

    "堆和栈的区别" 堆和栈是计算机科学中两个基本概念,它们都是程序在运行时所需的内存区域。理解堆和栈的区别是非常重要的,因为它们的使用方式和效率有很大的不同。 一、预备知识—程序的内存分配 一个由 C/C++ ...

    关于堆和栈的那些事共9页.pdf.zip

    堆和栈的区别主要有以下几点: 1. 分配方式:栈是由编译器自动分配和释放,而堆需程序员手动申请和释放。 2. 存储空间:栈的空间有限,通常为几MB;堆空间较大,取决于系统的实际内存。 3. 内存效率:栈内存分配和...

    堆和栈(常称为堆栈)的区别

    堆和栈的区别 堆和栈是C/C++编程中的两个基本概念,它们都是基本的数据结构。栈是一种系统提供的数据结构,特点是快速高效,缺点是有限制,数据不灵活。而堆是一种函数库提供的数据结构,特点是灵活,但需要程序员...

    Delphi源码实例演示堆分配与栈分配的不同..rar

    在编程世界中,堆和栈是两种不同的内存管理机制,对于任何编程语言,理解它们的工作原理都是至关重要的,特别是对于Delphi这样的高级编程语言。在这个Delphi源码实例中,我们将探讨堆分配与栈分配的区别。 首先,让...

    堆栈以及堆和栈的区别

    堆栈以及堆和栈的区别 堆栈是一种"后进先出"的主存区域,位于堆栈段中,使用SS段寄存器记录其段地址。它只有一个出入口,即当前栈顶,栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈有两种以字为...

    栈和堆栈的区别和联系

    标题和描述中的核心知识点主要集中在计算机科学领域中的数据存储机制,特别是栈(stack)和堆(heap)的区别和联系。为了深入理解这些概念,我们不仅需要掌握它们的基本定义,还要了解它们在实际编程中的应用以及与其他...

    C/C++ 中堆和栈及静态数据区详解

    区分堆和栈的关键点包括: - **管理方式**:栈由编译器自动管理,堆需要程序员手动管理。 - **空间大小**:栈的大小有限,而堆理论上可以很大。 - **碎片**:堆分配可能导致内存碎片,而栈不会。 - **生长方向**:...

    数据结构 栈

    3. **顺序栈的实现**:理解数组如何模拟栈的行为,包括如何处理栈满和栈空的情况,以及如何进行扩容和缩容。 4. **链式栈的实现**:了解链表节点的结构,如何通过指针操作实现压栈和弹栈,以及链式栈相对于顺序栈的...

    栈字符数组&混淆指针和数组所导致的错误

    在“混淆指针和数组所导致的错误”这篇文章中,可能涉及了以下几点: 1. **指针解引用和数组访问**:理解指针解引用(*pointer)与数组下标(array[index])的区别。前者是访问指针所指向的值,后者是在数组中选择...

    操作系统基本概念——栈,堆,并发,进程

    7. 说明“栈”和“堆”的差别。 答案:栈是一块按后进先出(FIFO)规则访问的存储区域,用来实现中断嵌套和子程序调用的参数和返回断点。而堆虽然是一块存储区域,但是对堆的访问是任意的,没有后进先出的要求,堆...

    C/C++几个经典的问题

    - **堆和栈的区别.doc**:在C++中,内存分为堆和栈两个主要部分。栈内存用于存储局部变量,管理自动进行,但空间有限;堆内存则用于动态分配,需要程序员手动管理,空间较大但效率相对较低。理解这两者的区别对于...

    VB 递归的“栈溢出”

    为避免栈溢出,有以下几种策略: 1. **优化递归**:确保递归函数有一个有效的终止条件,并且每次递归调用时问题规模显著减小。减少不必要的递归调用能有效降低栈空间需求。 2. **尾递归**:如果可能,尝试将递归...

    java面试题的几个区别

    ### Java面试题的几个关键知识点解析 #### 1. String和StringBuffer的区别 在Java中,`String`和`StringBuffer`是处理字符串的两种主要方式。`String`类是不可变的,这意味着一旦创建了一个`String`对象,它的内容...

    停车场管理系统(栈和队列的知识实现).

    系统设计时,还需要考虑以下几点: 1. 车位管理:为每个车位分配唯一的编号,便于跟踪和管理。 2. 车辆信息:记录每辆车的车牌号、入场时间等信息,以便于计费和查询。 3. 计费规则:根据停车时间和收费标准计算费用...

    leetcode总结1

    在本文中,我们将深入探讨堆和栈的区别,这些知识点对于LeetCode等编程平台上的问题解决至关重要。 首先,堆和栈是两种不同的内存区域,它们在内存管理、空间大小、碎片产生、生长方向、分配方式以及效率方面存在...

    栈与队列显示器

    在设计程序时,我们需要考虑以下几点: 1. 数据结构实现:正确实现栈和队列的数据结构,确保其操作效率。 2. 界面设计:创建一个友好的用户界面,显示栈和队列当前的状态,如元素个数、内容等。 3. 动态更新:每当...

    关于C语言教学中内存分析的几点思考.pdf

    动态存储区又分为堆区和栈区。 - 栈区(Stack):在函数执行时,为局部变量和函数参数分配内存单元。函数执行完毕后,这些存储单元会自动释放。 - 堆区(Heap):由程序员通过new或malloc函数进行内存的分配和通过...

    03_关于互联网Java工程师面试突击训练课程的几点说明.zip

    【标题】"03_关于互联网Java工程师面试突击训练课程的几点说明.zip" 提供的是一份针对互联网Java工程师面试的突击训练课程介绍。这个压缩包包含两部分内容:笔记.docx 和 PPT.pptx,可能分别对应着课程的学习笔记和...

Global site tag (gtag.js) - Google Analytics