3.7.1 运行时栈
目录
P164
释放只是增加指针而已,原来的数据仍然在内存里面但是不是栈的一部分了
栈帧是用于特定call指令的一个内存块,也一个call指令的时候,会调用某一个函数,如果寄存器无法存储下所有这个函数的开始信息(见图3-25的文字),那么就会在栈上为这次调用分配额外的信息,这一部分存储额外信息的栈就叫做栈帧。存储分配栈帧前%rsp的位置有两种方法:一是直接让系统计算出来栈帧的大小,然后就可以知道%rsp的偏移量,最后就可以还原;二是在使用动态数组等的时候无法计算栈帧的大小,就使用%rbp去记录开始的时候%rsp的值。具体例子见视频0:36:32(这个例子中为什么在栈区的15213会变成18213,是因为调用的那个函数就会直接修改栈区中的数值)
然后图3-25中,被保存的寄存器是在函数开始执行前,将某些寄存器的原始值保存到栈中,以便函数结束后可以恢复它们;参数构造区是在调用函数之前,调用者在栈上预留的一块空间,用来临时存放那些将通过栈传递的参数(也就是调用的函数会用到这些参数)

浙公网安备 33010602011771号