首页 > 其他分享 >栈回溯

栈回溯

时间:2022-09-28 23:14:04浏览次数:42  
标签:调用 函数 记录 函数调用 回溯 栈帧

什么是栈帧?

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

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

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

栈帧结构

 

 

 

什么是栈回溯

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

 

 

 

 

 

 

 

 

 

标签:调用,函数,记录,函数调用,回溯,栈帧
From: https://www.cnblogs.com/god-of-death/p/16739914.html

相关文章

  • leetcode131-分割回文串 回溯与方便判断回文串的的判断表
    131.分割回文串这是看了卡尔的代码写出来的classSolution{public:intsize;vector<vector<string>>res;vector<string>path;boolisHuiwen(......
  • 利用DbgHelp获取线程的栈回溯信息
     #include<iostream>#include<Windows.h>#include<process.h>#include<DbgHelp.h>#pragmacomment(lib,"Dbghelp.lib")usingstd::cout;usingstd::endl;......
  • 回溯算法:集合划分问题
    框架回溯算法中需要考虑到的问题路径,选择列表,结束条件结束条件//结束条件:已经处理完所有数if(track.size()==nums.length){//处理逻辑}//结束条件:已......
  • JS/TS算法---回溯算法
    回溯算法(backtracking)、什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏......
  • N皇后 【回溯算法】
    51.N皇后-力扣(LeetCode) 核心:1.按照层去选择2.使用String.copyValueOf(char[])将char数组转成StringclassSolution{List<List<String>>res;publ......
  • 组合问题看透回溯法
    通过组合问题看透回溯法前言已经好久没有更新了......
  • 回溯例子记录
    //回溯最主要还是那个indexconstsku=()=>{letiphone=["11","12"];letcolor=["red","blue"];letmemory=["64","256"];constcombine=(.......
  • Problem P24. [算法课回溯]组合问题
    采用递归遍历所有可能性,再使用剪枝减小运行时间,利用回溯,代码有注释#include<iostream>#include<bits/stdc++.h>#include<cstdio>#include<string>usingnamespace......
  • 回溯算法
    一、回溯1、定义:通过选择不同的岔路口来通往目的地(找到想要的结果)每一步都选择一条路出发,能进则进,不能进则退回上一步(回溯),换一条路再试【回溯很适合使用递归】举例......