堆、栈,还是 堆栈_堆和栈的作用是什么

堆、栈,还是 堆栈_堆和栈的作用是什么

编码文章call10242025-02-08 9:52:2611A+A-

关注微信公众号 老卢私塾


堆、栈

先明白一点:一些教材上写的(stack)其实只是

进程内存地址空间(内核ring0、用户ring3)


先说下静态数据区,一会再说栈、堆

static变量和全局变量的生命周期是一样的:从出生到程序结束。二者都存放在静态存储区。

本文只讨论ring3用户栈,以便与ring0内核栈区分开来。

内核栈是每个进程保留在内核内存中的内存区域,供(内核)内部函数调用时使用。用户栈驻留在不受保护(用户可操作)的用户内存中

l 堆heap

堆是先进先出的

堆空间的增长方向是从低地址向高地址增长

new,malloc/alloc是在堆上申请内存

堆的可用空间远大于栈空间

l 栈stack

栈是先进后出的

栈空间的增长方向是从高地址向低地址增长

栈的作用是局部变量(如函数实参)、函数call堆(调用函数时的寄存器信息)

每次调用函数时,会在栈上新分配一帧,每当函数返回时,再从栈上将此帧移去。

用专用寄存器:

1. ESP(栈顶指针)指向栈最上面一个栈帧的栈顶

2. EBP(栈底指针)指向栈最上面一个栈帧的底部

ESP-EBP=栈的大小

函数内的变量都可通过EBP加偏移量找到

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4