Linux进程虚拟地址空间的分布、以及堆和栈的区别

来源:互联网 发布:python 中英文翻译 编辑:程序博客网 时间:2024/05/20 03:44
一、具体分布如图所示:
二、关于堆和栈
(1)分配方式:
 栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
 堆:  一般由程序员分配释放,它的分配方式类似于链表。
(2)申请后系统的响应:
  栈:只要所申请的空间小于栈的剩余空间,则系统为程序分配内存,否则栈溢出。
  堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,遍历该链表,找出第一个大于所申请空间的节点,然后将其从链表中删除并分配,如果没用完,则系统会把多余的重新放回到链表中。
(3)申请大小的限制:
  栈:栈是高地址向低地址扩展的连续内存,栈的大小一般是2M;
  堆:堆低地址向高地址扩展的不连续内存,堆的大小与计算机有效的虚拟内存有关系。
(4)申请效率:
  栈:由系统自动分配,速度较快;
  堆:速度慢,容易产生内存碎片;
原创粉丝点击