天天看点

栈与堆

一、堆栈的定义

    堆(heap)栈(stack)都是一种数据项按顺序排列的数据结构。(合适的数据结构可以带来更高的运行或者储存效率,数据结构往往同高效的检索算法和索引计算有关,例如:集合总有用到LinkedList链表、ArrayList数组)

栈与堆

二、堆栈的功能

    只能在一端(称为栈顶(top))对数据进行插入(PUSH)和删除(POP)。(堆:队列优先,先进先出;栈:先进后出)

    在单片机中(可以理解为微型的计算机系统),是个特殊的存储区,是用来暂时存放数据和地址。

三、java中的应用

    a、栈与堆都是java用来在RAM中存放数据的地方。与C++不同,java自动管理栈和堆,程序员不能直接地设置栈和堆。

    b、栈的优势:

        ①存取速度快(仅次于CPU中的寄存器);

        ②栈内部多个值相等的变量是可以指向一个地址的(同一个栈中可以共享)。

    c、栈的缺点:

        ①存放数据的大小及生存期必须是确定的,缺乏灵活性;

        ②栈数据在多个线程或者多个栈之间是不可以共享的。

    e、堆的优势:

        ①动态的分配内存大小,生存期也不必事先告诉编辑器,java的垃圾收集器会自动收走这些不再使用的数据;

        ②存取速度慢(因为内存是动态分配的!)。

    f、java中的两种数据类型(基本类型与引用类型)。

        ①基本类型:byte、short、int、long、float、double、char、boolean。

        (char类型能储存一个汉字,一个汉字占两个字节。因为java采用unicode,2个字节(16位)来表示一个字符)

        基本数据类型既不是类的实例,也不是类的引用!这些自动变量存的是字面值,由于大小可知,生存期可知(这些字面

        值    义在某个程序块里面,程序块退出后,字段值就消失了),都放在栈中。       

        ②引用类型:String

        String str1='abc';数据放在栈里面

        String str2=new String('abc');数据放在堆里面

        只要是用new()来新建对象的,都会放在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的

        数据共享。

四、名词解释

    ①数据结构:相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。

    ②单片机:是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理功能的中央处理器CPU、随机存储器RAM、只

    读存储器ROM、多种I/0口和中断系统、定时器/计算器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、

    A/D转换器等电路)集成到一块硅片上构成而完善的微型计算机系统。

    ③RAM:随机存取存储器(Random access memory),是与CPU直接交换数据的内部存储器,也叫内存。它可以随时读

    写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。(运行内存大小决定电脑的性

    能!!!)

    ④ROM:只读存储器(Read-Only Memory),是一种只能读出事先所存数据的固态半导体存储器。(一旦储存资料就无法

    改变或删除)通常用在不需要经常变更资料的电子或电脑系统中,并且资料不会因为电源的关闭而消失。

五、参考资料

    堆与栈:https://baike.baidu.com/item/%E5%A0%86%E6%A0%88/1682032

    数据结构:https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1450?fr=aladdin

    单片机:https://baike.baidu.com/item/%E5%8D%95%E7%89%87%E6%9C%BA/102396

    ROM:https://baike.baidu.com/item/ROM/310411?fr=aladdin

RAM:https://baike.baidu.com/item/%E9%9A%8F%E6%9C%BA%E5%AD%98%E5%8F%96%E5%AD%98%E5%82%A8%E5%99%A8/4099402?fr=aladdin&fromid=144481&fromtitle=RAM+

上一篇: 神奇的栈帧

继续阅读