文章目录
数据结构型的堆与栈和内存使用中的堆与栈的不同,迷糊。由各个地方摘录。
内存使用中的堆与栈
- 栈区(stack)——由编译器自动分配释放,存储函数的参数值,局部变量的值等,其操作方式类似数据中的栈,先进先出。
- 堆区(heap)——一般由程序员分配释放,若程序员不分配也就没有堆,不释放,程序结束时可能由 OS 回收
区别和联系
申请方式
- 堆:由程序员自己申请并指明大小的,在 C 中 malloc 函数,如
p1=(char*)malloc(10)
- 栈:系统自动分配的,如声明在函数中一个局部变量 int b;系统自动在栈中为 b 开辟空间
申请后系统的响应动作
- 堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲节点链表中删除,并将该结点的空间分配给程序