堆和栈的区别

简述

堆和栈的概念与区别需要从两个方面说起

  • 数据结构的堆和栈
  • 内存分配方式的堆和栈

数据结构的堆和栈

  • 在数据结构中,栈是一种可以实现先进后出存储结构
  • 实际编程中的实现
    1. 静态栈:使用数组的形式来实现栈
    2. 动态栈:使用链表实

  • 在数据结构中,堆则是一种经过排序的树形数据结构,常用于实现优先队列

    堆说明.png

  • 堆是一种特殊的完全二叉树(节点是从左往右填满,最后一层的树叶都在最左边),每个节点的值都小于或者大于其子节点的值

内存分配中的堆和栈

C语言中,内存分配方式

  • 1.从静态存储区域分配由编译器自动分配和释放,内存在程序编译的时候就已经分配好,这块内存在整个程序运行期间都存在,直到整个程序运行结束才被释放
    1. 在栈上分配:同样由编译器自动分配和释放的,在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时,这些存储单元将被自动释放。需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但分配的内存容量有限
  • 3.从堆上分配:也被称为动态内存分配由程序员手动申请和释放的。即程序运行的时候由程序员使用内存分配函数(如malloc)来申请任意多少的内存,使用完之后再由程序员自己负责使用内存释放函数(如free函数)来释放内存。即动态内存的整个生存期是由程序员自己决定的。如果在堆上分配了内存空间,就必须及时释放它,否则将会导致运行程序出现内存泄露
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。