堆和栈
分为数据结构上的堆和栈,操作系统中的堆和栈
一、数据结构中的堆和栈
堆:堆是满足一定限制的树型结构(比如父亲节点的权值要大于儿子节点的权值,左儿子又要大于右儿子)。
栈:是一种先进后出的数据结构,只能对栈顶进行操作
二、操作系统中的堆和栈
栈区(stack)— 由编译器自动分配的连续内存空间 ,申请时只要申请空间大于剩余空间就分配,用完了自动清理内存空间,主要用于存放函数的参数值,局部变量的值等。
堆区(heap) — 一般由程序员分配,是不连续的内存空间,(操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会 遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内 存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大 小,系统会自动的将多余的那部分重新放入空闲链表中), 使用完成后应手动进行释放,若程序员不释放,程序结束时可能由OS回收 。对于面向对象程序来说,new出来的任何对象,无论是对象内部的成员变量,局部变量,类变量,他们指向的对象都存储在堆内存中,在栈中有一个指向内容的指针。