分配内存时栈和堆在操作系统的底层原理

2 分钟阅读 244 字 + 139 词
栈是用于管理函数调用,局部变量等的高效的内存区域,由操作系统自动管理
而堆是用于动态分配的内存区域,由程序员手动管理(或者垃圾回收)
栈在操作系统底层实现:
  1. 线程创建的时候,操作系统为其创建栈空间
  2. 栈的使用:只需要移动栈指针
  3. 硬件支持:寄存器 x86 rsp rbp
  4. 操作系统管理:
    1. 函数调用时,先将参数压栈
    2. 执行call指令,将返回地址(返回上一级函数的下一条指令)压栈
    3. 创建栈帧,保存旧的rbp,设置新的rbp
    4. 为局部变量分配空间
    5. 恢复之前的rbp和rsp,ret指令弹出返回地址
为什么栈的分配速度比堆快? 栈只需要移动指针,堆需要查找空闲内存块
多线程程序中,栈和堆如何隔离? 栈是线程私有,堆是进程共享,需要同步机制

目录