堆与栈

文章目录

数据结构型的堆与栈和内存使用中的堆与栈的不同,迷糊。由各个地方摘录。

内存使用中的堆与栈

  • 栈区(stack)——由编译器自动分配释放,存储函数的参数值,局部变量的值等,其操作方式类似数据中的栈,先进先出。
  • 堆区(heap)——一般由程序员分配释放,若程序员不分配也就没有堆,不释放,程序结束时可能由 OS 回收

区别和联系

申请方式

  • 堆:由程序员自己申请并指明大小的,在 C 中 malloc 函数,如p1=(char*)malloc(10)
  • 栈:系统自动分配的,如声明在函数中一个局部变量 int b;系统自动在栈中为 b 开辟空间

申请后系统的响应动作

  • 堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲节点链表中删除,并将该结点的空间分配给程序
分享到:
network