简述
堆和栈的概念与区别需要从两个方面说起
- 数据结构的堆和栈
- 内存分配方式的堆和栈
数据结构的堆和栈
栈
- 在数据结构中,栈是一种可以实现先进后出的存储结构
- 实际编程中的实现
- 静态栈:使用数组的形式来实现栈
- 动态栈:使用链表实
堆
-
在数据结构中,堆则是一种经过排序的树形数据结构,常用于实现优先队列。
堆说明.png 堆是一种特殊的完全二叉树(节点是从左往右填满,最后一层的树叶都在最左边),每个节点的值都小于或者大于其子节点的值
内存分配中的堆和栈
C语言中,内存分配方式
- 1.从静态存储区域分配:由编译器自动分配和释放,内存在程序编译的时候就已经分配好,这块内存在整个程序运行期间都存在,直到整个程序运行结束才被释放
- 在栈上分配:同样由编译器自动分配和释放的,在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时,这些存储单元将被自动释放。需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但分配的内存容量有限。
- 3.从堆上分配:也被称为动态内存分配,由程序员手动申请和释放的。即程序运行的时候由程序员使用内存分配函数(如malloc)来申请任意多少的内存,使用完之后再由程序员自己负责使用内存释放函数(如free函数)来释放内存。即动态内存的整个生存期是由程序员自己决定的。如果在堆上分配了内存空间,就必须及时释放它,否则将会导致运行程序出现内存泄露。