内存、数据结构中的堆栈

内存中的堆和栈

程序在内存中分为以下几个部分:
1、栈区:
由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区:
由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 ,分配方式类似于链表。
3、全局区
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区
常量字符串就是放在这里的, 程序结束后由系统释放。
5、程序代码区
存放函数体的二进制代码。

内存 分配 由程序分配:malloc/new 由编译器自动分配
释放 一般由程序员分配释放。若程序员不释放,程序结束时可能由OS回收 。free/delete 由编译器自动释放
作用 程序运行时申请的动态内存:malloc/free或者new/delete 存放函数的参数值,局部变量的值等
特性 先入后出
大小 受限于虚拟内存 编译器决定,一般为1M
内存空间 向高地址扩展,不连续的内存区域 向低地址扩展,一块连续的内存的区域

数据结构的堆和栈

数据结构:元素按一定规则排列,并满足一定的操作方式

性质:
1、堆中的某个节点的值总是不大于或者不小于其父节点的值:根节点最大,叫最大堆;根节点最小,叫最小堆
2、总是一颗完全二叉树


性质:
1、只允许再一端进行插入和删除,此端为栈顶,另一端为栈底
2、先入后出

你可能感兴趣的:(C++)