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

xiaoxiao2021-02-28  79

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

最新回复(0)