堆(heap)和栈(stack)的区别

堆和栈的区别

  一个由c/C++编译的程序占用的内存分为以下几个部分 

  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 

  2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 

  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。

  4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 。

  5、程序代码区—存放函数体的二进制代码。 

数据结构

  1、堆是二叉树,堆栈是线性表 

  堆通常用来排序即“堆排序 

  堆排序是指利用堆(heaps)这种数据结构来构造的一种排序算法。堆是一个近似完全二叉树结构,并同时满足堆属性:即父节点的键值或索引总是大于(大头堆)或者小于(小  头堆)任何一个子节点。通常升序建大头堆降序建小头堆,一般用数组表示。具体算法可参阅相关数据结构的书籍。 

  2、堆栈也是一种数据结构 

  线形表是具有n个元素的有限序列,而堆栈是限定仅在表尾进行插入或删除操作的线形表,因此,对堆栈来说表尾称为栈顶,相应的表头称为栈底,由于只能在表尾进行插入或删除操作,所以堆栈遵循先进后出的原则即先进入堆栈的元素要在后进去的元素出栈之后才能出栈 

  堆栈可以用数组表示也可以用链表来表示(链栈),两种表示方法各有优劣,要视用途而定。 

堆(heap)和栈(stack)的区别



原文链接: https://www.cnblogs.com/vrliym/archive/2012/03/15/2397544.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    堆(heap)和栈(stack)的区别

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/44295

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午8:55
下一篇 2023年2月8日 下午8:57

相关推荐