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

堆和栈的几点区别

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

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

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

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

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

相关推荐

    堆和栈的区别详细说明

    堆和栈究竟有什么区别? 主要的区别由以下几点: 1、管理方式不同; 2、空间大小不同; 3、能否产生碎片不同; 4、生长方向不同; 5、分配方式不同; 6、分配效率不同;

    栈和堆的区别 doc

    栈是由编译器在需要时分配的,不需要时自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。堆是由malloc()函数(c++语言为new运算符)分配的内存块,内存释放由程序员手动控制...栈和椎的主要区别有以下几点:

    java堆栈的区别 -- 详解

    堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈...

    c++面试题基础分享.doc

    10.请讲述堆和栈的区别 11.全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的 12.new、delete、malloc、free之间的关系 13. 头文件种的ifndef/define/endif 是干什么用的 14.TCP和UDP...

    Java 基础面试题

    该文档主要整理了常见的Java基础面试题,包含以下内容: 1. 抽象类和接口的区别 2. 什么时候使用抽象类,什么时候使用接口 3. 八大基本数据类型,所占字节数 4. List、Set、Map的区别 ...35. 堆和栈的区别

    C语言进阶-牟海军.pdf

     堆和栈、全局变量和局部变量、生存期和作用域、内部函数和外部函数、指针变量、指针数组和数组指针、指针函数和函数指针、传址和传值、递归和嵌套、结构体和共用体、枚举、位域等较难理解的核心概念的阐述和对比...

    C语言进阶 作者 Wrestle.Wu

     堆和栈、全局变量和局部变量、生存期和作用域、内部函数和外部函数、指针变量、指针数组和数组指针、指针函数和函数指针、传址和传值、递归和嵌套、结构体和共用体、枚举、位域等较难理解的核心概念的阐述和对比...

    史上最全Java面试大全

    简答题 22 1.面向对象的特征有哪些方面 22 ...21. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 29 22.swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 31

    入栈和出栈的基本操作.docx

    在实现栈的基本操作时,需要考虑以下几点: - 栈可以用数组或链表实现。使用数组时,需要考虑数组大小的限制;使用链表时,需要考虑内存管理。 - 在入栈操作时,需要检查栈是否已满(如果使用数组实现的话),如果...

    JAVA面试题最全集

    堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27....

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 17 【基础】abstract class和interface有什么区别? 18 【基础】静态嵌套类(Static Nested Class)和内部类(Inner Class)...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师...

    c/c++ 学习总结 初学者必备

    5,、解释堆和栈的区别? 答: (1)栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 (2)堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由...

    程序员实用算法——源码

     8.8 关于计算器要注意的最后几点  8.9 用于计算平方根的牛顿算法  8.10 分期付款表  8.11 资源和参考资料 第9章 数据压缩  9.1 行程编码  9.2 霍夫曼压缩  9.2.1 代码  9.2.2 其他问题  9.3 ...

    最新名企标准通用C++面试题,

    C++面试题 ...整理:松鼠 时间:2009-5-8 1、const 有什么用途?(请至少说明两种) 答: (1)可以定义 const 常量 ...(Google搜):DOS下程序是独占方式,堆分为近堆和远堆,近堆和栈是在数据段开辟的同...

    计算机二级C语言考试题预测

    (52) 栈和队列的共同点是(C) 注:这一共同点和线性表不一样 A. 都是先进后出 B. 都是先进先出 C. 只允许在端点处插入和删除元素 D. 没有共同点 (53) 已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序...

    一些C面试题,希望能对大家有帮助

    4、队列和栈有什么区别? 队列先进先出,栈后进先出 5、写出下列代码的输出内容 #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...

Global site tag (gtag.js) - Google Analytics