0x01 栈帧是什么
“IA32 programs make use of the program stack to support procedure calls”.
“IA32程序使用程序栈帧来支持子程序调用”(出自CSAPP,即《深入理解计算机系统》)
个人理解,栈帧就是内存的一段数据,在内存栈区域,对子程序的数据进行一个临时保存。
什么是栈?
栈和堆类似,都是操作系统中分配给用户程序使用的一段内存区域,根据CSAPP中的图:
附中文解释:
Kernel virtual memory:内核虚拟内存,内核是操作系统常驻于内存中的一部分,而这一段空间就是为内存所保留的。应用程序开发者对这一段空间没有权限读写,也不能直接调用内核代码中的函数。
User stack(created at run time):用户栈区域(执行时创建),在用户虚拟地址空间的最顶部是用户栈,编译器用它来实现函数调用,用户栈在程序执行时自动扩展,尤其是在我们每一次调用函数时。
Run-time heap(created at run time by malloc):执行时堆(在执行时通过malloc函数创建),代码和数据区域之后紧跟着就是执行时堆,与代码和数据区域不同的是,代码和数据区域在程序执行时已经固定了大小,而它和栈一样是动态扩展的,在C库函数m