博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区别数据结构中的堆栈与内存中的堆栈的个人总结【转】
阅读量:2185 次
发布时间:2019-05-02

本文共 869 字,大约阅读时间需要 2 分钟。

(转自:)

数据结构中的堆栈:是两种特殊的数据结构,都是对数据项按序排列的数据结构,对管理数据的一种手段和方法。可以用来存放数据和地址,栈只能在一端(栈顶)对数据项进行插入和删除。

内存中的堆栈:是确切存在的物理结构,是用来存放不同数据的内存空间。

内存中的栈,是由系统自动分配和释放的,是由高地址向低地址扩展的数据机构,是一段连续的内存区域,是对数据结构中的栈这种手段的实现。栈的顶地址和最大容量是系统预先设定好的,在程序编译时,它就是一个确定的常数,但注意并不是所有用到栈技术的区域都是栈区,虽然目前是这样,这是概念定义的准确性问题。 

内存中堆,一般用来动态分配内存的,它的实现跟操作系统和编译器有关,一般内存中的堆貌似是用链表实现的。

内存中的堆:队列优先,先进先出。向高地址扩展的数据结构,是不连续的内存区域,在操作系统中,一般是由程序员动态分配释放的,分配方式:操作系统有一个专门存储空闲地址的链表,当程序申请分配空间时,OS会遍历这个链表(遍历方向:低地址向高地址),找到第一个大于申请的空间的堆节点,并从空闲节点列表中删除该节点,把空间分配给程序,若找到的空间比申请的空间要大,系统会自动把多余的那部分重新放入空闲链表中。一般来说,操作系统会在内存的首地址处记录分配的空间大小,以便程序能够正确地释放该内存空间。堆的大小取决于计算机有效的虚拟内存。

虚拟内存:利用部分的硬盘空间充当内存使用。由于程序运行是所需内存(随机存储器RAM)过大,会导致内存消耗殆尽,系统会自动调用硬盘空间充当内存,缓解内存紧张。RAM空间匮乏时,可以增加虚拟内存来进行补偿。当计算机从RAM中读取数据的速度一般比硬盘快,所以想要程序的运行速度更快,最直接的是加内存条,RAM越大,程序运行越快。

内存中的栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,先进后出。它是由高地址向低地址扩展的数据机构,是一段连续的内存区域,只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

 

转载地址:http://hbqkb.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>
【LEETCODE】125-Valid Palindrome
查看>>
【LEETCODE】28-Implement strStr()
查看>>
【LEETCODE】6-ZigZag Conversion
查看>>
【LEETCODE】8-String to Integer (atoi)
查看>>
【LEETCODE】14-Longest Common Prefix
查看>>
【LEETCODE】38-Count and Say
查看>>
【LEETCODE】278-First Bad Version
查看>>
【LEETCODE】303-Range Sum Query - Immutable
查看>>
【LEETCODE】21-Merge Two Sorted Lists
查看>>