堆栈
内核栈:每个进程保留在内核内存中的内存区域,供(内核)内部函数调用时使用。
用户栈:驻留在不受保护(用户可操作)的用户内存中。
静态区域:static变量和全局变量的生命周期是一样的,从出生到程序结束,二者都放在静态存储区。
栈(stack):先进后出,增长方向是从高地址向低地址增长。作用是局部变量(如函数实参)、函数call堆栈(调用函数时的寄存器信息)每次调用函数时,会在栈上新分配一帧,每当函数返回时,再从栈上将此帧移除。
1、ESP(栈顶指针)指向栈最上面一个栈帧的栈顶。
2、EBP(栈底指针)指向栈最上面一个栈帧的底部。
ESP-EBP = 栈的大小
函数内的变量都可以通过EBP加偏移量找到
(PS:很多书上翻译stack为堆栈,其实把人搞乱了,应该它翻译成栈)
堆(heap):先进先出,增长方向是从低地址向高地址增长。new,malloc/alloc是在堆上申请内存,堆的可用空间远远大于栈空间,例如new一个几十上百M的对象。