gpt4 book ai didi

exception-handling - 异常帧与返回堆栈上的其他数据有何区别?

转载 作者:行者123 更新时间:2023-12-04 07:55:25 26 4
gpt4 key购买 nike

我试图了解异常帧在 THROW 期间如何位于返回堆栈上.

“jonesforth.f.txt”中的注释断言“当被调用时,THROW 沿着返回栈向上走(这个过程被称为‘展开’),直到它找到异常栈帧。”我不清楚 (EXCEPTION-MARKER)与返回堆栈上的另一个其他数据(返回地址、使用 >R 的用户值以及 do 循环的索引)不同。

一般来说,各种 Forth 是如何区分异常帧和返回栈上的其他数据的呢?

最佳答案

似乎 Gforth 没有使用这种“展开”方法。

相反,它将事件异常帧的位置存储在全局变量中,同时将先前事件帧的位置保存在返回堆栈上的新帧中。当抛出异常时,Gforth 直接从全局变量中读取最后一帧(最内部捕获)的位置。

实际上,在我检查过的其他多个方面,我没有看到 'unwind' 方法的这种实现。所有这些都在 中使用了相同的链接框架的想法。链表 ,头指针存储在一个全局变量中。这看起来很典型:http://lars.nocrew.org/dpans/dpansa9.htm

也许 Jones Forth 依赖于一个假设,即返回堆栈应该只包含抛出时的返回地址。标记地址是唯一的,因为它是字典单词。并且典型的循环索引不会达到与返回地址混淆的那么高。

关于exception-handling - 异常帧与返回堆栈上的其他数据有何区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com