栈回溯

什么是栈帧?

(栈帧的定义)“栈帧也叫过程活动记录,是编译器用来实现过程 / 函数调用的一种数据结构。”实际上,可以简单理解为:栈帧就是存储在用户栈上的每一次函数调用所涉及的相关信息的记录单元。

(函数调用的定义)函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。因此栈作用就是用来保持栈帧的活动记录。

(每个栈帧大小相同吗?)栈帧表示程序的函数调用记录,而栈帧又是记录在栈上面,很明显栈上保持了N个栈帧的实体,那就可以说栈帧将栈分割成了N个记录块,但是这些记录块大小不是固定的,因为栈帧不仅保存诸如:函数入参、出参、返回地址和上一个栈帧的栈底指针等信息,还保存了函数内部的自动变量(甚至可以是动态分配内存,alloc函数就可以实现),因此,不是所有的栈帧的大小都相同。

栈帧结构

 

 

 

什么是栈回溯

“栈的回溯”,它是指系统自主打印进程调用栈的行为。从上面描述栈帧的情况可以看出,系统在将栈打印出来的顺序应当是调用的反顺序,它是从esp(低地址)一点一点向高地址回溯,这正是栈帧形成的反过程。因此,我们经常从下到上看函数的调用,不过有些日志系统将导出的回溯信息重新排序,可以从上到下来查看函数调用顺序。

 

 

 

 

 

 

 

 

 

posted @ 2022-09-28 23:00  流水灯  阅读(208)  评论(0编辑  收藏  举报