堆栈

 

 内核栈:每个进程保留在内核内存中的内存区域,供(内核)内部函数调用时使用。

 

用户栈:驻留在不受保护(用户可操作)的用户内存中。

 

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

 

栈(stack):先进后出,增长方向是从高地址向低地址增长。作用是局部变量(如函数实参)、函数call堆栈(调用函数时的寄存器信息)每次调用函数时,会在栈上新分配一帧,每当函数返回时,再从栈上将此帧移除。

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

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

ESP-EBP = 栈的大小

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

(PS:很多书上翻译stack为堆栈,其实把人搞乱了,应该它翻译成栈)

 

堆(heap):先进先出,增长方向是从低地址向高地址增长。new,malloc/alloc是在堆上申请内存,堆的可用空间远远大于栈空间,例如new一个几十上百M的对象。

 

posted @ 2021-08-05 11:56  补码  阅读(108)  评论(0编辑  收藏  举报