setjmp 和 longjmp - 通过示例进行理解

2023-12-23

我知道 setjmp 和 longjmp 的定义。 setjmp 将环境存储在堆栈上下文中,另一个恢复。

但我认为我的部分还存在一些缺乏理解的地方。有人可以在很好的例子的帮助下向我解释一下我如何保证、如何保存以及如何恢复吗?

我看到jmp_buf中有很多指向CPU的寄存器。但我如何确保它已恢复?

请帮助我用简洁的例子来解释。我用谷歌搜索并提到了其他有关堆栈溢出的问题,但没有一个给出明确的例子。

预先非常感谢。

P.S:它应该仅来自 Linux/Unix 上下文。


打电话时longjmp(),所有这些寄存器都会自动恢复,并在相应的调用处继续执行setjmp(),但这一次setjmp()有不同的返回值(类似于fork()父级和子级有不同的返回值)。

setjmp()/longjmp()只保存有限的环境。特别是,它们只保存堆栈指针,而不是完整堆栈,因此您只能返回到同一函数或调用函数。 POSIX 有setcontext(),它允许在堆栈之间切换,使其对于实现诸如用户空间线程(原纤维,绿色线程,...)之类的东西更加立即有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setjmp 和 longjmp - 通过示例进行理解 的相关文章

随机推荐

  • Python ASCII 到二进制

    是否有一个内置函数可以将 ASCII 转换为二进制 例如 将 P 转换为 01010000 我正在使用Python 2 6 6 两个人在一起怎么样 bin ord P 0b1010000
  • 使用 HighCharts 和 DotNet.HighCharts 来“玩”多个系列

    我有一组使用 VB NET 和 DotNet HighCharts 创建的系列 Dim SeriesList4As New List Of Series stfipsList4 Count 我想要发生的是类似的事情http jsfiddle
  • 删除navigationItem.titleView后恢复navigationItem.title

    我的应用程序有 2 个选项卡 tabA and tabB 根据我设置的位置navigationItem titleView of tabB to a UIImageView when viewWillAppear 叫做 默认行为tabB就是
  • Android:DOM vs SAX vs XMLPullParser 解析?

    我正在使用 SAX 解析器解析 XML 文档 我想知道与哪个合作更好更快DOM SAX解析器 or XMLPull解析器 这取决于你在做什么 如果你有非常大的文件 那么你应该使用 SAX 解析器 因为它会触发事件并释放它们 内存中不会存储任
  • 响应内容必须是实现 __toString() 的字符串或对象,给定“boolean”。在拉拉维尔

    响应内容必须是实现 toString 的字符串或对象 给定 boolean 这是我的代码 Route get user ip function Request request ip request gt ip return ip retur
  • 在 mac osx lion 中安装(构建)matplotlib

    我安装了 pynum 和 scipy 在带有 python 2 7 的 osx Lion 上 但是当我尝试构建 matplotlib 时 git clone https github com matplotlib matplotlib gi
  • 使用 class_eval 和 instance_eval 访问 Ruby 类变量

    我有以下内容 class Test a 10 def show a puts a a end class lt lt self b 40 def show b puts b b end end end 为什么以下工作有效 Test inst
  • 在 C# 中创建 iCal 文件

    我正在寻找一种在 c asp net 中生成 iCalendar 文件 ics 的好方法 我找到了一些资源 但缺少的一件事是他们对引用可打印fields 具有回车符和换行符的字段 例如 如果描述字段未正确编码 仅显示第一行 并且可能会损坏
  • (403) 您的项目无权访问此功能

    一直遵循有关如何插入网络属性的文档 以便我可以动态创建跟踪代码 目标是将我们的分析转移到 Google Analytics 中 并在分析下在他们自己的 Google 帐户上自动创建客户网站 经过我在网上找到的信息 似乎这个功能可能被列入白名
  • Redis启动后是空的,虽然有.rdb文件

    在我的 redis cli 中运行 shutdown save 后 等待 save 命令完成 跟随 redis 日志 并备份我的 redis rdb 文件 我尝试从头开始启动 redis 服务器 它已启动具有空数据库 dbsize 0 我能
  • POI 4 XPage - 文档生成只能运行一次

    好吧 说实话 标题并没有说出全部真相 我正在使用带有多个按钮 保存 关闭 编辑等 和一个执行 POI 操作的按钮的自定义控件 它生成一个 Word 文件 我在这里遇到一个问题 点击 POI 按钮后 我的其他按钮 以及 POI 按钮 将不再工
  • JavaScript 中的这个

    我在 javascript 中使用 this 时遇到了一个令人困惑的问题 我有一个方法 get data 它返回对象的一些成员变量 有时它会将对象本身返回给我 我不知道为什么 有人能解释一下这里发生了什么吗 function Feed It
  • JIRA:生成每个用户的时间报告?

    抱歉 如果 SO 不是最好的地方 但我在 JIRA 中启用了时间跟踪 并且希望能够为给定日期范围内的每个用户生成时间报告 我唯一拥有的时间跟踪报告选项非常有限 并且不能满足我的要求 是否可以通过标准功能或免费插件来实现 您可能想查看用于 J
  • JavaFX - 带箭头画线(画布)

    我将此代码重写为 JavaFX 时遇到问题 private final int ARR SIZE 8 void drawArrow Graphics g1 int x1 int y1 int x2 int y2 Graphics2D g G
  • 在 EF Core 中如何选择特定列并保存

    我有以下 SQL 表 ID INT Status NVARCHAR 50 FileContent XML 使用 EF Core 我想选择ID and Status列 但不加载 XML 列 由于 xml 数据可能很大 我不想将其加载到内存中
  • MacVim 的西班牙语拼写检查器?

    如何为 MacVim 添加西班牙语拼写检查器 我读到这是一个有用的link ftp ftp uniovi es pub vim runtime spell ghindex html 但显然它不起作用 我该怎么办 我不了解 MacVim 但是
  • 了解使用 LFSR 实现 CRC 生成的两种不同方法

    There are two ways of implementing CRC generation with linear feedback shift registers LFSR as shown in this figure The
  • Spring Boot 转换 Enum 忽略大小写

    我有一个 spring boot 应用程序 它暴露了Rest API https i stack imgur com DT1tp png 此 API 接受枚举列表batchStatus作为查询参数 这batchStatus用于根据状态过滤所
  • 过程式编程比面向对象编程有什么优势吗?

    编辑 早些时候 我问这个问题可能是一个框架很糟糕的问题 即何时使用 OOP 与何时使用过程编程 一些回复暗示我是在寻求帮助理解 OOP 相反 我经常使用 OOP 但想知道何时使用过程方法 从反馈来看 我认为存在相当强烈的共识 即 OOP 通
  • setjmp 和 longjmp - 通过示例进行理解

    我知道 setjmp 和 longjmp 的定义 setjmp 将环境存储在堆栈上下文中 另一个恢复 但我认为我的部分还存在一些缺乏理解的地方 有人可以在很好的例子的帮助下向我解释一下我如何保证 如何保存以及如何恢复吗 我看到jmp buf